【发布时间】:2017-07-25 19:39:34
【问题描述】:
我想使用队列来保存结果,因为我希望消费者(串行而非并行)在工作人员产生结果时处理工作人员的结果。
现在,我想知道为什么下面的程序会挂起。
import multiprocessing as mp
import time
import numpy as np
def worker(arg):
time.sleep(0.2)
q, arr = arg
q.put(arr[0])
p = mp.Pool(4)
x = np.array([4,4])
q = mp.Queue()
for i in range(4):
x[0] = i
#worker((q,x))
p.apply_async(worker, args=((q, x),))
print("done_apply")
time.sleep(0.2)
for i in range(4):
print(q.get())
【问题讨论】:
-
我不确定我是否明白你在问什么。您显示的代码是否由于某种死锁而无法正常工作,或者它是否可以正常工作并且您正试图针对某些潜在的未来问题对其进行强化?
-
它挂起。我找到了一个解决方案,但它使用管理器,并且需要复制输入。对不起,有问题的错字:'when' -> 为什么。
标签: python parallel-processing queue multiprocessing pool