Python Queue(队列)
Queue模块实现了多生产者、多消费者队列。当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用,实现了所有必需的锁定语义。
一、该模块实现了三种类型的队列,它们的区别仅在于检索条目的顺序:
1、FIFO 队列,其添加的第一个任务是第一个检索的任务。
2、LIFO 队列,其最近添加的条目是第一个检索的(像堆栈一样运行)。
3、Priority 队列,其条目将保持排序,并首先检索最低值的条目。
二、该模块定义了以下类和异常:
- class
Queue.Queue(maxsize = 0 ) -
FIFO队列的构造函数。 maxsize是一个整数,用于设置可以放入队列的项目数的上限。达到此大小后,插入将阻止,直到消耗队列项。如果 maxsize小于或等于零,则队列大小为无限大。
- class
Queue.LifoQueue(maxsize = 0 ) -
LIFO队列的构造函数。 maxsize是一个整数,用于设置可以放入队列的项目数的上限。达到此大小后,插入将阻止,直到消耗队列项。如果 maxsize小于或等于零,则队列大小为无限大。
- class
Queue.PriorityQueue(maxsize = 0 ) -
Priority队列的构造函数。 maxsize是一个整数,用于设置可以放入队列的项目数的上限。达到此大小后,插入将阻止,直到消耗队列项。如果 maxsize小于或等于零,则队列大小为无限大。
- exception
Queue.Empty -
在queue对象为空时调用非阻塞
get()或get_nowait()时引发异常。
exceptionQueue.Full-
在queue对象已满时调用非阻塞
put()或put_nowait()时引发异常。
三、queue对象提供下面描述的公共方法:
Queue.qsize()
返回队列的大致大小(非准确值)。
Queue.empty()
如果队列为空则返回True,否则返回False(仅限当前,不保证后续情况)。
Queue.full()
如果队列已满则返回True,否则返回False(仅限当前,不保证后续情况)。
Queue.put(item [,block [,timeout ] ] )
将item放入队列。如果可选参数block为true 且 timeout为None,则在必要时阻止,直到有空闲槽可用。如果 timeout是一个正数,它会阻止最大超时时间,如果在该时间内没有可用的空闲槽,则会引发Full异常。
反之(block为false),如果有空闲槽可以立即使用,则将item放入队列,否则引发Full异常(在这种情况下忽略超时)。
Queue.put_nowait(item)
相当于 put(item, False)。
Queue.get([ block [,timeout ] ] )
从队列中删除并返回一个item。 如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。 如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。
反之(block为false),如果有item可以立即使用,则返回该tem,否则引发Empty异常(在这种情况下忽略超时)。
Queue.get_nowait()
-
相当于 get(False)。
四、queue对象还提供了两种方法来支持跟踪守护进程、消费者线程是否已完全处理入队任务:
Queue.task_done()-
表示之前队列的任务已完成。由队列消费者线程使用。对于用于获取任务的每个get(),对task_done()的后续调用会告知队列该任务的处理已完成。
如果join() 当前正阻塞,则它将在所有条目都已处理后恢复(这意味着已为每个已放入队列的条目收到task_done()调用)。
如果调用的次数超过队列中放置的条目,则引发ValueError。
Queue.join()-
阻止直到队列中的所有条目都已获取并处理完毕。
每当条目添加到队列时,未完成任务的计数就会增加。每当消费者线程调用
task_done()以指示该条目已被检索并且其上的所有工作都已完成时,计数就会下降。当未完成任务的数量降至零时,join()取消阻止。
如何等待队列任务完成的示例:
def worker():
while True:
item = q.get()
do_work(item)
q.task_done() q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start() for item in source():
q.put(item) q.join() # block until all tasks are done
Python Queue(队列)的更多相关文章
- Python -- queue队列模块
一 简单使用 --内置模块哦 import Queuemyqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限. ...
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- Python Queue队列
queue is especially useful in threaded programming when information must be exchanged safely between ...
- 简短而有效的python queue队列解释
Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue ...
- Python 用队列实现多线程并发
# Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站 ...
- Python自动化运维之16、线程、进程、协程、queue队列
一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- Python之队列Queue
今天我们来了解一下python的队列(Queue) queue is especiall useful in threaded programming when information must be ...
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...
随机推荐
- vlookup使用
数据处理过程中,需要excel进行简单的操作,比如vlookup,摸索之后,总结如下:
- MyEclipse2017创建Spring项目
1.创建一个Web Project 2.右击项目-->Properties 3.搜索Spring -->Peoject Facets-->在右边找到Spring,打勾并保存 4.测试 ...
- 20164301 Exp5 MSF基础应用
Exp5 MSF基础应用 1. 实践内容 1.1一个主动攻击实践,如ms08_067,smb_delivery(唯一) 1.2 一个针对浏览器的攻击,如ms10_046: 1.3 一个针对客户端的攻击 ...
- BLE和2.4G实现通信
1. 背景 客户的项目是无线控制灯具,目前采用2.4G芯片,一端是2.4G遥控器,一端是2.4G灯具.现在客户的需求是在不增加成本的条件下增加手机APP控制.因为BLE芯片一般会比纯2.4G芯片价格高 ...
- js入门 关于js属性及其数据类型(详解)
1. js的本质就是处理数据.数据来自于后台的数据库. 所以变量就起到一个临时存储数据的作用. ECMAScript制定了js的数据类型. 数据类型有哪些? 1. 字符串 String 2. 数字 ...
- visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案
一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...
- redis命令行批量删除匹配到的key
执行命令如下 redis-cli -h 12.132.30.21 -p 6379 -a 2016 -n 4 keys "ecard*" | xargs redis-cli -h 1 ...
- [转]Python机器学习笔记 异常点检测算法——Isolation Forest
Isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好像并没有统一的中文叫法.可能大家都习惯用其英文的名字isolat ...
- 未能加载文件或程序集“SuperMap.Mapping, Version=7.0.0.0, Culture=neutral, PublicKeyToken=0635c574ea890381”或它的某一个依赖项。试图加载格式不正确的程序。
开发SuperMap.Mapping的时候,蹦出来的错误!让人摸不着头脑.查找原因如下: (1)安装32位的super map iobject后,进行开发,vs上选择目标平台是x86位的,然后从控件列 ...
- linux 中 && 及|| 判断原理
[root@linuxprobe ~]# [ $USER = root ] && echo "root" || echo "user"root[ ...