重新定义循环内的函数并使用joblib并行计算

时间:2019-05-20 11:26:09

标签: python joblib

我想并行化计算,同时在循环内重新定义要评估的函数。在我的Mac上,出现意外行为,即该函数未动态重新定义。

例如,我在Mac上运行以下代码

from joblib import Parallel, delayed

for i in range(2):

    def the_function(x):
        return i*x

    result = Parallel(n_jobs=2, verbose=0)(delayed(the_function)(x) for x in range(3))
    print(result)

并获得错误的输出

[0, 0, 0]
[0, 0, 0]

如果我在Dell Ubuntu计算机上运行相同的代码,或者设置了n_jobs=1,则可以得到预期的输出结果

[0, 0, 0]
[0, 1, 2]

我的理解是(在我的Mac上)joblib试图通过一劳永逸地定义the_function来帮助我,而我希望joblib为循环的每次迭代重新定义the_function。有没有一种简单的方法可以告诉Joblib像我想要的那样工作,也许可以通过清除一些内存来实现?

编辑:一种解决方法是设置backend = 'multiprocessing'而不是loky。不幸的是,这带来了相当大的效率损失(我的代码花费了两倍的时间),所以我想知道是否存在基于使用loky的变通方法。毕竟它可以在我的Ubuntu计算机上工作!

0 个答案:

没有答案