Queue消息队列
进程之间的数据时不共享的, 因此想要在两个进程之间使用相同的数据, 那么需要使用到进程池的通信
- 进程池通信方式有多种, 其中最主要用到是:
管道(Pipe)和队列(Queue)
Queue队列常用方法
- 导入方式:
from multiprocessing import Queue
- Queue(n):
初始化一个消息队列, 并指定这个队列中最多能否容纳多少条消息, 例如:q = Queue(2),如果不传参数可以传任意数据, 直到内存饱满
- put(object, block, timeout):
默认是阻塞的方式,如果消息队列满了, 程序会阻塞在这个地方, 直到消息队列没有满为止。 block参数:默认为True, 设置为False,如果为阻塞状态,会立马抛出异常 timeout参数:默认为None, 如果指定最长时间,一旦超过时间了就会抛出异常
- put_nowait():
如果队列满了,会立马抛出异常
- qsize():
获取消息队列的消息数量
- full():
判断这个消息队列消息是否满了
- empty():
判断这个消息队列是否为空
- get(block, timeout):
获取队列中先添加进去的数据, 还会把这个数据从消息队列中删除, 如果获取到消息会阻塞到这个地方 block参数:默认为True, 如果设置为False, 一旦队列中没有数据, 立马抛出异常, timeout参数:指定阻塞最长时间, 一旦超过该时间抛出异常
put可以传入多种数据类型
使用Queue给Process进程通信
使用Queue做进程池(Pool)通信
- 如果是使用Pool创建进程,
就需要使用multiprocessing.Manager中的Queue()
- 导入方法:
from multiprocessing import Manager