Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将joblib与导入的函数一起使用时出错_Python_Import_Parallel Processing_Multiprocessing_Joblib - Fatal编程技术网

Python 将joblib与导入的函数一起使用时出错

Python 将joblib与导入的函数一起使用时出错,python,import,parallel-processing,multiprocessing,joblib,Python,Import,Parallel Processing,Multiprocessing,Joblib,我正在使用joblib来并行化我的python 3.5代码。 如果我这样做: 代码不起作用。相反: 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)) 这管用 有人能

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

代码不起作用。相反:

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))
这管用

有人能解释一下为什么我必须把所有的函数放在同一个脚本中吗


这是非常不实际的,因为在模块中有很多我编写的函数,我不想复制/粘贴到主脚本中。

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

Parallel( n_jobs  =  n_jobs, backend='threading')(delayed(f)(i) for i in range(10))

我找到了一个变通方法,允许您将helper函数保留在单独的模块中。对于要并行化的每个导入函数,在主模块中定义一个代理函数,例如

def f_proxy(*args, **kwargs):
    return f(*args, **kwargs)

只需使用
delayed(f_proxy)
。这仍然有些不令人满意,但比将所有助手函数移到主模块中更干净。

欢迎使用。请,为了使代码可读,请您将代码标记为可读代码。请您发布更多信息,说明您的代码不起作用的原因?错误消息、观察到的行为等。。。我没有错误,代码开始,但当它到达“并行”时,它停止工作,就好像它进入了一个infite循环。我认为它可能在寻找“modules”中定义的函数,但“modules”与主脚本位于同一文件夹中。所以应该能够找到他们。另外,非并行版本运行良好。这与本文报告的问题类似,但我自己无法复制它。如果您可以使用joblib 0.14.0或更高版本复制完整的回溯信息,遇到此问题的人是否可以报告完整的回溯信息?请注意,这不是一个很好的解决方案,因为所有线程都共享同一个GIL实例,因此CPU受限的工作不会释放GIL。
def f_proxy(*args, **kwargs):
    return f(*args, **kwargs)