如何在类方法上克服joblib的"TypeError:不能pickle instancemethod对象"?

use*_*117 7 scikit-learn

给出一个类和2个方法,其中A,B.

在A中尝试执行以下命令时,我收到"TypeError:无法pickle instancemethod对象":

joblib.Parallel(n_jobs=-1)(joblib.delayed(self.B)(arg1, arg2, arg3) for arg1 in arg1_values_list)
Run Code Online (Sandbox Code Playgroud)

我在Stackoverflow上找到了几个关于instancemethod的线程,其中一部分甚至与joblib有关,但我仍然无法克服这个错误.

编辑:

以下代码:

from sklearn.externals.joblib import Parallel, delayed
def a(self, x):
    print x
    return x*10

class c(object):
    def b(self):
        Parallel(n_jobs=-1)(
            delayed(a)(self, i) 
            for i in range(10))

test_c = c()

test_c.b()
Run Code Online (Sandbox Code Playgroud)

正常运行时运行正常.

但尝试使用"python -m cProfile"进行配置文件时失败

ogr*_*sel 3

仅将 Python 无状态函数传递给joblib.Parallel. 您可以尝试import dill注册实例方法的酸洗支持:https://pypi.python.org/pypi/dill(不过您的情况可能会有所不同)。

  • 太不可思议了!调试了4个小时,问题原因是cProfile!使用时,joblib并行失败。 (12认同)
  • 谁能发布有关 cProfiles 的解决方案吗? (2认同)