使用带有导入函数的 joblib 时出错

Grg*_*Grg 6 python parallel-processing import multiprocessing joblib

我正在使用joblib并行化我的 python 3.5 代码。
如果我做:

from modules import f
from joblib  import Parallel, delayed

if __name__ == '__main__':
    Parallel( n_jobs  =  n_jobs,backend = "multiprocessing")(delayed(f)(i) for i in range( 10 ))
Run Code Online (Sandbox Code Playgroud)

代码不起作用。反而:

from joblib import Parallel, delayed

def f( i ):
    # my func ...

if __name__ == '__main__':
    Parallel( n_jobs  =  n_jobs, backend = "multiprocessing")(delayed(f)(i) for i in range(10))
Run Code Online (Sandbox Code Playgroud)

这有效!

有人可以解释为什么我必须将所有函数放在同一个脚本中吗?

这真的不切实际,因为在模块中有很多我编码的函数,我不想在主脚本中复制/粘贴。

小智 3

我遇到了类似的问题。当我从导入调用函数时,它只是冻结,而当我调用本地函数时,它工作正常。通过使用多线程而不是像这样的多处理来解决它

Parallel( n_jobs  =  n_jobs, backend='threading')(delayed(f)(i) for i in range(10))
Run Code Online (Sandbox Code Playgroud)