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

时间:2013-12-17 07:45:19

标签: scikit-learn

给出一个类和两个方法A,B。

我在A中尝试执行以下命令时遇到“TypeError:无法pickle instancemethod对象”:

joblib.Parallel(n_jobs=-1)(joblib.delayed(self.B)(arg1, arg2, arg3) for arg1 in arg1_values_list)

我在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()

正常运行时运行正常。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

尝试给 backend="threading",默认情况下是多进程,它似乎正在崩溃。这为我解决了问题