queue模块笔记
queue被称为消息队列,数据不会混乱,也可以用于复杂业务传递元素,队列是多线程的利器,其内部有锁的机制可以控制数据的统一且安全
queue.Queue()按照先进先出原则
queue.LifoQueue()按照后进先出原则
queue.PriorityQueue()优先级队列,数字越小优先级越高
import queue
import time
t = queue.Queue(2)#设置列队大小,如果有三条数据过来那就会等待,直到取走为止
t.put('a')#put 放入列队,
t.get()
t.put('b')
t.put('c')
while True:
print(t.get())#取
time.sleep(2)
full,empty
import queue
t = queue.Queue(3)#不填就是无限
t.put('a')
print(t.empty())#问:没了吗? 如果列队中有值返回False
t.get()
print(t.empty())#没了,返回True
t.put('b')
t.put('c')
t.put('d')
print(t.full())#问:满了吗? 如果列队中满了返回True
t.get()
print(t.full())#没有满,返回false
#如果满了使用put或者空了使用get同样会报错
put
block=True
import queue
t = queue.Queue(maxsize=3)
t.put('a')
t.put('b')
t.put('c')
t.put('d',True,3)
#Queue.put(item, block=True, timeout=None),item元素,如果block=True且timeout=None该方法将一直等待直到有队列有空余空间
#如果block=True且timeout=3,也就是在3秒后抛出异常
block=False
import queue
t = queue.Queue(maxsize=3)
t.put('a')
t.put('b')
t.put('c')
t.put('d',False,None)#只要block=False,不管设不设时间,立马就会抛出异常
get
block=True
import queue
t = queue.Queue(maxsize=3)
t.get(block=True,timeout=3)#报错了
#t.get(block=True)#这样为空就等于都不写,不报错
#默认Queue.get(block=True, timeout=None),如果设置了timeout
block=False
import queue
t = queue.Queue(maxsize=3)
t.get(block=False,timeout=3)#不管设不设时间,立即报错
get_nowait和put_nowait
t.get_nowait()#立即取出一个元素,t.get_nowait(item)等价于get(item,False)
t.put_nowait('f')#立即放入一个元素,t.put_nowait(item)等价于put(item, False)
其他
t.task_done()#在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
print(t.qsize())#返回当前队列中元素个数
t.join()#实际上意味着等到队列为空,再执行别的操作
#以上是线程queue,如果是进程之间需要相互通信(一发一收),可以主进程的对象作为一个参数传给子进程,只是copy主进程的对象,主进程和子进程不是相互公用同一数据
版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
queue模块笔记的更多相关文章
- Python多线程笔记(三),queue模块
尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 que ...
- Python3.5 queue模块详解
queue介绍 queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue 在python中,多个线程之间的数据是共享的,多个线程进行数据交换 ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- Python之队列queue模块使用 常见问题与用法
python 中,队列是线程间最常用的交换数据的形式.queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式 import queue q = queu ...
- Python多线程(3)——Queue模块
Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Python 2 中的Queue模块在Python ...
- threading模块和queue模块实现程序并发功能和消息队列
简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...
- 同步队列-Queue模块解析
Queue模块解决了生产者.消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程. 在Queue模块中有三种不同的队列类,区别是不同队列取出数据的顺序 ...
- 【Python@Thread】queue模块-生产者消费者问题
python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 from random import randint from ...
- Python之Queue模块
Queue 1.创建一个“队列”对象 >>> import Queue >>> queue = Queue.Queue(maxsize=100) >>& ...
随机推荐
- qt QML弹出新页面之后,如何屏蔽上一个页面的按钮区域事件
Rectangle{ //Rectangle是要显示的新页面 //增加一个mouseArea:,必须好把MouseArea作为第一个子元素,如果放在最后且不设置z属性的话,会覆盖其//他控件 Mous ...
- Spring初解
1,关于spring容器: spring容器是Spring的核心,该 容器负责管理spring中的java组件, ApplicationContext ctx = new ClassPathXmlA ...
- [转帖]谷歌宣称首次实现量子优越性,IBM“不服”,中国同行咋看?
谷歌宣称首次实现量子优越性,IBM“不服”,中国同行咋看? 投递人 itwriter 发布于 2019-10-24 15:46 评论(7) 有306人阅读 原文链接 [收藏] « » https:// ...
- Python23之内置函数filter()和map()
首先我们了解一个概念:迭代 迭代是访问集合元素的⼀种⽅式.迭代器是⼀个可以记住遍历的位置的对象.迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 我们已经知道 ...
- 《The Google File System》 笔记
<The Google File System> 笔记 一.Introduction 错误是不可避免的,应当看做正常的部分而不是异常.因此需要设计持续监控,错误检查,容错,自动恢复的系统. ...
- leetcode 2019.10.29 首次破百
刷题首次破百,记录一下自己成长的历程. 仍在路上,会慢慢变强的~
- scrapy框架4——下载中间件的使用
一.下载中间件 下载中间件是scrapy提供用于用于在爬虫过程中可修改Request和Response,用于扩展scrapy的功能:比如: 可以在请求被Download之前,请求头部加上某些信息(例如 ...
- csdn博客整理
@TOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown ...
- vue 等比例截图组件,支持缩放和旋转
<template> <div class="crop-image" :style="wrapStyle"> <img :src= ...
- Thymeleaf模板引擎与springboot关联后,在html中无法使用el表达式获取model存的值
头部引入了thymeleaf <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thy ...