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

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被垃圾收集,将调用此方法。关闭队列不会在队列使用者中产生任何类型的数据结束信号或异常。例如,

你可能感兴趣的:(Python基础,队列,python,多线程,多进程)