2

我正在尝试在 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)?谢谢

4

2 回答 2

3

问题出在这行代码中:

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.

于 2018-07-31T19:24:08.557 回答
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))

它是一种魅力。

看起来您的代码给出了错误,但由于错误位于并行部分内,因此它不会以某种方式浮出水面。

于 2017-10-02T12:34:59.330 回答