小编Sal*_*ena的帖子

具有导入功能的Python多处理池

使用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中,我已经成功地使多处理程序可以在一个程序上工作,这显然不理想。

python windows python-3.x python-multiprocessing

5
推荐指数
0
解决办法
103
查看次数