python中mulprocessing.Queue
来源:互联网 发布:录制长视频软件 编辑:程序博客网 时间:2024/06/01 20:01
1. put数据
1) 消息队列的长度
# 先进先出队列
>>> from multiprocessing importQueue
>>>
# 最多接收1个数据
>>> q=Queue(10)
# put向队列中添加数据
>>> q.put(5)
>>> q.put(59)
>>>
# 获取当前队列的长度
>>> q.qsize()
2
#取出最前面的一个数据
>>> q.get()
5
>>>
2) 超出时间
>>> from multiprocessing importQueue
>>>
>>> q=Queue(2)
>>>
>>>
>>> q.put(5)
>>> q.put(59)
>>>
>>> q.qsize()
2
>>>
# 超时时间为2秒
>>> q.put('Tracy',timeout=2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\multiprocessing\queues.py", line 102, input
raise Full
Queue.Full
>>>
现在队列的最大长度设置为2,当第三个数据向里面插入时,最多等待两秒,两秒后还没有进入到队列中就报错
3) 设置队列不阻塞
>>> from multiprocessing importQueue
>>> q=Queue(2)
>>>
>>> q.put(5)
>>> q.put(59)
>>>
# 设置队列不阻塞(当队列满的时候再插入数据,直接报错)
>>> q.put('tracy',block=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\multiprocessing\queues.py", line 102, input
raise Full
Queue.Full
>>>
>>> q.qsize()
2
>>>
默认程序会阻塞,等待新的值插入到队列当中,使用了block=False参数后,强制设置为不阻塞,一旦超出队列长度,立即抛出异常
2. get数据
1) 设置超出时间
>>> from multiprocessing importQueue
>>> q=Queue(2)
>>>
>>> q.put(5)
>>> q.put(59)
>>>
>>> q.qsize()
2
>>> q.get()
5
>>> q.get()
59
>>> q.get(timeout=2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\multiprocessing\queues.py", line 132, inget
raise Empty
Queue.Empty
>>>
当取值的次数大于队列的长度的时候就会产生阻塞,设置超时时间意为最多等待x秒,队列中再没有数据,就抛出异常
2) 设置不阻塞
>>> from multiprocessing importQueue
>>> q=Queue(2)
>>> q.put(5)
>>> q.put(59)
>>>
>>> q.qsize()
2
>>> q.get()
5
>>> q.get()
59
>>> q.get(block=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\multiprocessing\queues.py", line 134, inget
raise Empty
Queue.Empty
>>>
获取队列的次数大于队列长度时,默认会阻塞,通过设置block=False来实现非阻塞,立即抛出异常
3. Queue类
1)__init__:如果不给这个构造方法传参数,队列的长度为无限大
2)get():参数为是否阻塞和超时时间
3)get_nowait():非阻塞获取队列中的值
4)put()&&put_nowait():与get&&get_nowait同理
5)empty():检查队列是否为空,为空返回True,不为空返回False
6)full():判断队列是否已经满了
7)qsize():返回队列中元素的个数(真实个数)
8)join()&&task_done():multiprocessing.Queue中没实现
>>> import Queue
>>>
>>> q=Queue.Queue(2)
>>> q.put(5)
>>> q.put(59)
>>>
程序执行完这5行代码后会退出,退出前队列中还有值,退出后被清空
>>> import Queue
>>> q=Queue.Queue(2)
>>>
>>> q.put(4)
>>> q.put(23)
>>>
>>> q.get()
4
>>> q.get()
23
>>> q.join()
队列中插入两个元素,后面取出了两个元素,执行后你会发现,程序还是卡在第10行的那个join代码
>>> import Queue
>>>
>>> q=Queue.Queue(2)
>>> q.put(4)
>>> q.put(23)
>>>
>>> q.get()
4
>>> q.task_done()
>>> q.get()
23
>>> q.task_done()
>>>
>>> q.join()
>>>
在每次get取值之后,还需要在跟队列声明一下,已经取出了数据并处理完毕,执行join代码的时候才不会被卡住
- python中mulprocessing.Queue
- python Queue
- Queue python
- Python--Queue
- python Queue
- python Queue
- python queue
- Python queue
- python Queue
- python queue
- [Python] python Queue模块
- 关于python中,Queue的task_done()以及join()
- python multiprocess 包中工具类Queue的使用
- Python中使用Threads和Queue给tornado添加客户端
- 解决python进程池中无法使用multiprocessing.Queue
- python multiprocess 包中工具类Queue的使用
- python Queue模块
- python Queue模块
- maven无法对src/main/java下面的xml文件进行编译的解决办法
- View--学习笔记(二)--View滑动
- BZOJ 1093 浅谈tarjan缩点DAG最长路径即拓扑排序
- 一篇文章学懂Shell脚本
- c3p0-0.9.2.1数据连接池连接报错问题
- python中mulprocessing.Queue
- Commendo War UVa-11729
- 嵌入式系统学习——S3C2451之串口UART
- 实体类的概念与总结
- 最大似然估计算法(极大似然估计算法)
- AOP:PostSharp和Castle DynamicProxy
- [Leetcode 153 && 154] Find Minimum in Rotated Sorted Array (II)
- oracle删除表空间
- Android Studio初次使用genymotion注意几点