使用Windows和python 3.6后,一旦导入要映射的函数,就无法进行多重处理。该代码有效(给出输出[2,12,30,56,90]):
from multiprocessing import Pool
def f(x,y):
return x*y
if __name__ == '__main__':
args=[(1,2),(3,4),(5,6),(7,8),(9,10)]
with Pool(4) as p:
result=p.starmap(f,args)
print(result)
Run Code Online (Sandbox Code Playgroud)
现在,我将函数f移到另一个名为“ test”的.py文件中,然后将其导入:
from multiprocessing import Pool
from test import f
if __name__ == '__main__':
args=[(1,2),(3,4),(5,6),(7,8),(9,10)]
with Pool(4) as p:
result=p.starmap(f,args)
print(result)
Run Code Online (Sandbox Code Playgroud)
与test.py只包含:
def f(x,y):
return x*y
Run Code Online (Sandbox Code Playgroud)
运行它会导致无限循环(不会返回任何CPU使用率很高的内容)。
是什么原因造成的,有没有办法解决?通过将所有代码复制到一个巨大的.py中,我已经成功地使多处理程序可以在一个程序上工作,这显然不理想。