【问题标题】:Python: joblib does not work on custom-defined functionPython:joblib 不适用于自定义函数
【发布时间】:2016-01-17 16:17:25
【问题描述】:

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

【问题讨论】:

  • 我可以通过将它们放在if __name__ == '__main__' 块中来成功执行您的两个语句
  • @lambo477,不适合我,我已经修改了我的帖子。
  • 您的代码现在可以在我的 Windows 环境 Python 2.7.9 中完美运行
  • @lambo477,这太奇怪了!我的笔记本和台式机都不能执行自定义函数f

标签: python parallel-processing joblib


【解决方案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 所做的那样。

【讨论】:

    【解决方案2】:

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

    我不太确定,但我认为问题出在“延迟(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))
    

    它是一种魅力。

    看起来您的代码出现错误,但由于错误在并行部分内,因此它不会出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多