Как преодолеть joblib "TypeError: can't pickle instancemethod objects" на методе класса?

учитывая класс и 2 метода в нем A, B.

Я получаю "TypeError: не могу мариновать объекты instancemethod" при попытке выполнить следующую команду в A:

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

Я нашел несколько потоков в Stackoverflow относительно instancemethod, и часть из них даже связана с joblib, но мне все еще не удалось преодолеть эту ошибку.

EDIT:

следующий код:

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"

1 ответов


вероятно, безопаснее передавать только функции без состояния Python в joblib.Parallel. Вы можете попробовать import dill чтобы зарегистрировать поддержку маринования, например, методы:https://pypi.python.org/pypi/dill (ваш пробег может отличаться, хотя).