python queue - 同步队列类
参考 官网
queue 模块
queue 模块实现多生产者,多消费者队列。
当必须在 多个线程之间安全地交换信息 时,它在线程编程中特别有用。
此模块中的Queue类实现了所有必需的锁定语义。
这取决于Python中线程支持的可用性;看到线程模块。
该模块实现了三种类型的队列,区别仅在于检索条目的顺序。
三种类型队列
FIFO队列
先入先出。在 FIFO队列 中,添加的第一个任务是第一个检索的任务。
LIFO队列
后入先出。在 LIFO队列 中,最近添加的 item 是第一个被get()检索的(像堆栈一样运行)。
优先级队列
使用 优先级队列,item 将保持排序(使用heapq模块),并首先被get()检索到的是最低值的 item。
在内部,模块使用锁来临时阻止竞争线程;
但是,它不是为处理线程内的重入而设计的。
queue 模块定义以下类和异常:
class 类
Queue
FIFO队列的构造函数。
queue.Queue(maxsize=0)
# maxsize是一个整数,用于设置可以放入队列的项目数的上限。
# 达到此大小后,插入将阻止,直到消耗队列项。
# 如果maxsize小于或等于零,则队列大小为无限大。
LifoQueue
LIFO队列的构造函数。
queue.LifoQueue(maxsize=0)
# maxsize是一个整数,用于设置可以放入队列的项目数的上限。
# 达到此大小后,插入将阻止,直到消耗队列项。
# 如果maxsize小于或等于零,则队列大小为无限大。
PriorityQueue
优先级队列的构造函数。
queue.PriorityQueue(maxsize=0)
# maxsize是一个整数,用于设置可以放入队列的项目数的上限。
# 达到此大小后,插入将阻止,直到消耗队列项。
# 如果maxsize小于或等于零,则队列大小为无限大。
# 首先检索最低值的条目(最低值条目是由 sorted(list(entries))[0] )返回的条目。
# 条目的典型模式是以下形式的元组:(priority_number,data)。
异常
Empty
在对空的 Queue对象调用非阻塞 get()( 或 get_nowait() )时引发异常。
queue.Empty
Full
在已满的 Queue对象调用非阻塞 get()( 或 get_nowait() )时引发异常。
queue.Full
方法
queue 对象(Queue,LifoQueue 或 PriorityQueue)提供下面描述的公共方法。
| Queue .qsize () | 返回队列的大致大小。 | 注意,size()>0 不保证后续的 get() 不会阻塞,qsize()<maxsize 也不保证put()不会阻塞。 |
| Queue .empty () | 队列是否为空,是返回True否返回False。 | 如果empty()返回True,则不保证对put()的后续调用不会阻塞。 类似地,如果empty()返回False,则不保证对get()的后续调用不会阻塞 |
| Queue .full () | 队列是否已满 | |
| Queue .put (item, block=True, timeout=None) | 将 item 放入队列 | 如果可选的block为true且timeout为None(默认值),则在必要时阻塞,直到有空闲插槽可用。 如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的空闲槽,则会引发Full异常。 若 block 为 false,如果空闲插槽立即可用,则将项目放在队列上,否则引发完全异常(在这种情况下忽略超时)。 |
| Queue .put_nowait (item) | 相当于 put(item, False) |
|
| Queue .get (block=True, timeout=None) | 从队列中删除并返回一个item | 如果可选的block为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。 如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。 若 block 为 false,如果一个项立即可用则返回一个项,否则引发Empty异常(在这种情况下忽略超时)。 |
| Queue .get_nowait () | 相当于get(False) |
|
| Queue .task_done () | 表示以前排队的任务已完成 | 由队列使用者线程使用。对于用于获取任务的每个get(),对task_done()的后续调用会告知队列该任务的处理已完成。 |
| Queue .join () | 主线程等待子线程结束才结束 |
python queue - 同步队列类的更多相关文章
- Python 多线程同步队列模型
Python 多线程同步队列模型 我面临的问题是有个非常慢的处理逻辑(比如分词.句法),有大量的语料,想用多线程来处理. 这一个过程可以抽象成一个叫“同步队列”的模型. 具体来讲,有一个生产者(Dis ...
- Python -- queue队列模块
一 简单使用 --内置模块哦 import Queuemyqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限. ...
- Python线程优先级队列(Queue)
Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列 LifoQueue,和优先级队列PriorityQueue.这些队列都实 ...
- python多线程以及同步队列(转)
转自:http://www.w3cschool.cc/python/python-multithreading.html 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长 ...
- python多线程--优先级队列(Queue)
Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实现 ...
- Python学习---同步条件event/队列queue1223
写在前面: 在使用这些共享API的时候,我们要注意以下几点: 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Proce ...
- Python3 queue队列类
class queue.PriorityQueue(maxsize=0) 优先级队列构造函数. maxsize 是个整数,用于设置可以放入队列中的项目数的上限.当达到这个大小的时候,插入操作将阻塞至队 ...
- Python Queue队列
queue is especially useful in threaded programming when information must be exchanged safely between ...
- 同步队列-Queue模块解析
Queue模块解决了生产者.消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程. 在Queue模块中有三种不同的队列类,区别是不同队列取出数据的顺序 ...
随机推荐
- Etherscan API 中文文档-账号
本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读. 账号(Account) 账号及地址相关的 API,接口的参数说明请参考Etherscan ...
- fatal pylint error : ......can't find '__main__'module in
fatal pylint error : ......can't find '__main__'module in原因是没有安装pylint,所以提示没有找到__main__模块 解决方案:1.到官网 ...
- CC14:集合栈
题目 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通栈相同的push和pop操作. 给定一个操作序列int[] ...
- CodeForces - 500A-New Year Transportation(模拟)
New Year is coming in Line World! In this world, there are n cells numbered by integers from 1 to n, ...
- loj6198谢特 后缀数组+并查集+Trie
先把问题放在后缀数组上考虑 已知两个数组a b,求min(a[i],...,a[j])+(b[i]^b[j])的最大值 套路题 初始每个点都是一个小连通块 把a按从大到小的顺序加入,计算当前加入边作为 ...
- hdu6062RXD and logic gates多校题 构造
听说标算的点数是2^(n+1)级别的,也不知道我是不是比标算优一点? (话说这种题一眼看过去怎么跟题答一样) 然而并不是题答,没法手玩,来考虑一下一般解法: 考虑一个规模较小的问题:最后一位一定是0 ...
- AtCoder Beginner Contest 071 ABCD
1001 求个绝对值比较大小喽 1002 把字符串出现的字母记录一下,然后遍历a-z,谁第一个没出现就输出谁 1003 Problem Statement We have N sticks with ...
- Map和Map.Entry
Map是java中的接口,Map.Entry是Map的一个内部接口. Map.entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry. Map.Entry是Map声明的一 ...
- VS2010/VS2013项目创建及通过ADO.NET连接mysql/sql server步骤(VS2013连接成功步骤见上一篇随笔)
本随笔主要是对初学者通过ADO.NET连接数据库的步骤(刚开始我也诸多不顺,所以总结下,让初学者熟悉步骤) 1.打开VS新建一个项目(这里的VS版本不限,建项目都是一样的步骤) VS2010版本如图: ...
- 基于JAVA的设计模式之代理模式
概念 王宝强有一个经纪人叫宋喆,这个经纪人很吊,可以代理王宝强做一系列的事情,与粉丝活动.王宝强的微博维护.安排王宝强的行程以及什么什么等等.如果王宝强一个人做岂不是累死.通过这个代理人为王宝强节省了 ...