Python多进程队列(Queue)和生产者消费者模型

本文介绍了Python中利用多进程和队列实现生产者消费者模型,以解决并发问题。通过阻塞队列,生产者和消费者解耦,队列作为缓冲区平衡两者处理速度。JoinableQueue模块的使用使得消费者能通知生产者任务完成,避免程序卡死。
摘要由CSDN通过智能技术生成

Python中每个进程的内存是相互隔离的,那么如何实现进程之间的通信了,multiprocessing模块提供了队列和管道2种方式来实现进程之间的消息传递。队列的底层就是通过管道和锁来实现的。
队列相关的方法如下,队列中的数据先进先出

from multiprocessing import Process,Queue

q = Queue([maxsize])  # 创建一个队列,maxsize表示队列的大小,即可以存放几条数据,如果省略则可以存放无穷多条数据,取决于你内存空间的大小

q.put(data,block=True,timeout=3) 
# 往队列里面存数据data
# 如果block为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。如果超时,会抛出Queue.Full异常。如果block为False,但该Queue已满,会立即抛出Queue.Full异常。

q.get(block=True,timeout=3) 
# 从队列里面去取数据,该方法了put方法一样,也是有block和timeout2个参数。用法同参建put方法。

q.get_nowait():# 等同于q.get(block=False)
q.put_nowait():# 等同于q.put(block=False)

q.empty() # 判断队列是否为空
q.full() # 判断队列是否已经满了
q.qsize() # 返回队列中存放数据的个数
# 由于多进程是并发执行的,随时都有可能向队列里面存放数据,也可能葱队列里面去取数据。故这个结果并不是很可靠。

q.cancel_join_thread() # 不会在进程退出时自动连接后台线程。可以防止join_thread()方法阻塞
q.close() # 关闭队列,防止队列中加入更多数据。调用此方法,后台线程将继续写入那些已经入队列但尚未写入的数据,但将在此方法完成时马上关闭。如果q被垃圾收集,将调用此方法。关闭队列不会在队列使用者中产生任何类型的数据结束信号或异常。例如,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值