【发布时间】:2016-02-23 23:10:28
【问题描述】:
我正在尝试使用multiprocessing 在 Python 中创建一个简单的生产者/消费者模式。它有效,但它挂在poll.join()。
from multiprocessing import Pool, Queue
que = Queue()
def consume():
while True:
element = que.get()
if element is None:
print('break')
break
print('Consumer closing')
def produce(nr):
que.put([nr] * 1000000)
print('Producer {} closing'.format(nr))
def main():
p = Pool(5)
p.apply_async(consume)
p.map(produce, range(5))
que.put(None)
print('None')
p.close()
p.join()
if __name__ == '__main__':
main()
示例输出:
~/Python/Examples $ ./multip_prod_cons.py
Producer 1 closing
Producer 3 closing
Producer 0 closing
Producer 2 closing
Producer 4 closing
None
break
Consumer closing
然而,当我改变一行时,它可以完美地工作:
que.put([nr] * 100)
在运行 Python 3.4.3 或 Python 2.7.10 的 Linux 系统上可 100% 重现。我错过了什么吗?
【问题讨论】:
标签: python multiprocessing producer-consumer pool