我在以下代码中做错了什么?
import multiprocessing as mp
from multiprocessing import Process
import numpy as np
def fun(X):
return X;
def funct(p,i):
print 'Hey'
res = [p.map(fun,range(2))];
return res;
if __name__ == '__main__':
pool = mp.Pool(2);
output = mp.Queue();
proc = [mp.Process(target = funct,args=(pool,i)) for i in range(2)]
for p in proc:
p.start()
for p in proc:
p.join()
results = [output.get() for p in proc]
print results
启动流程后程序无法运行。
答案 0 :(得分:3)
multiprocessing.Pool
并不支持传递给子流程,如multiprocessing
documentation中所述:
请注意,池的方法只能由创建它的进程使用。
所以实际上没有办法做你正在尝试的事情。我假设您上面的代码只是演示问题的一个示例,因此我不会直接对此进行评论,但您需要将实际代码重构为仅从父级调用池方法过程(或者可能在孩子自己中创建池,但这可能不是一个好的解决方案)。