这个问题在这里已有答案:
我目前正在尝试使用多处理设置参数研究,但我不知道如何使用队列将结果返回到主进程。
有人可以帮忙告诉我,为什么我的例子不起作用?
import numpy as np
import multiprocessing as mp
from queue import Empty
def run(q1):
q1.put({'val':np.random.random(), 'ErrFlag':False})
if __name__ == '__main__':
q = mp.Queue()
pool = mp.Pool(processes = 10)
results = []
for i in range(50):
pool.apply_async(run, (q,))
pool.close()
pool.join()
while True:
try:
res = q.get(timeout = 1)
results.append(res['val'])
except Empty:
break
print(f'result: {repr(np.array(results))}\n')
执行此操作时,我只获得一个空数组。
这是Sharing a result queue among several processes的副本
您应该使用管理器使您的队列可供不同的工作人员访问:
pool = mp.Pool(processes=10)
m = mp.Manager()
q = m.Queue()