Python:joblib不适用于自定义函数

时间:2016-01-17 16:17:26

标签: python parallel-processing joblib

我正在尝试在python中使用并行计算包joblib。我可以执行以下示例并获得结果

Parallel(n_jobs=8)(delayed(sqrt)(i) for i in range(10))

但是,以下代码无效。

from joblib import Parallel, delayed
def f(x):
    return 1
def y(x):
    result=Parallel(n_jobs=8)(delayed(x)(i) for i in range(10))
    return result
if __name__ == '__main__':
    print y(f)

当我运行上面的代码时,它会一直运行而不会产生任何结果或消息。

任何人都可以找出这种奇怪行为的原因(我使用的是Windows)吗?感谢

2 个答案:

答案 0 :(得分:1)

问题出在这行代码中:

result=Parallel(n_jobs=8)(delayed(x)(i) for i in range(10))

它应该是:

result=Parallel(n_jobs=8)(delayed(f)(i) for i in range(10))

您必须将函数名传递给delayed,就像使用第一个示例使用sqrt一样。

答案 1 :(得分:0)

当我尝试你的代码时,它也会一直为我运行。

我不太确定,但我认为问题出在“延迟(x)”

如果我试试这个:

if __name__ == '__main__':
    def f(x):
        return 1
    def y(x):
        result=Parallel(n_jobs=8)(delayed(sqrt)(i) for i in range(10))
        return result
    print(y(5))

它充当魅力。

看起来您的代码会出错,但因为错误位于parrellel部分内部,所以它不会表现出来。

相关问题