因为队列是阻塞的,当队列长度超过默认的最大长度时,调用put就会阻塞,进程就卡住不会退出了;同样,如果队列为空时,调用get也同样会阻塞卡住。(不过我尝试加大队列长度,创建queue时指定maxsize似乎也没起效果)
队列一般用于生产者消费者模型,如果你再创建一个消费者进程来消费队列里的东西,就不会有问题了。当然也要注册队列为空时get也会阻塞,可以加timeout参数指定超时时间,或用get_nowait
给你个例子:
import multiprocessing
def queueuein(queue):
for x in range(20000):
print('+', x)
queue.put(x)
print('queueuein 结束')
queue.put(None) # 结束标志
def consume(queue):
while True:
r = queue.get()
if r is None: # 取得None就结束
break
print('-', r)
if __name__ == '__main__':
queue = multiprocessing.Queue(maxsize=100)
process = multiprocessing.Process(target=queueuein, args=(queue,))
consume_process = multiprocessing.Process(target=consume, args=(queue,))
process.start()
consume_process.start()
process.join()
consume_process.join()
print('queue.qsinze() >>>', queue.qsize())
print('close .....')