Как преодолеть 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 (ваш пробег может отличаться, хотя).