Я пытаюсь распараллелить код, используя методы класса с помощью многопроцессорности. Базовая структура следующая:
# from multiprocessing import Pool
from pathos.multiprocessing import ProcessingPool as Pool
class myclass(object):
def __init__(self):
#some code
def mymethod(self):
#more code
return another_instance_of_myclass
def myfunc(myinstance,args):
#some code
test=myinstance.mymethod()
#more code
return myresult #not an instance,just a number
p=Pool()
result = p.map(myfunc,listwithdata)
После того, как это не удалось с обычной многопроцессорной обработкой, я узнал о проблемах с Pickle и многопроцессорной обработкой, поэтому я попытался решить ее с помощью multiprocessing.pathos. Тем не менее, я все еще получаю
PicklingError: Can't pickle <type 'SwigPyObject'>: it's not found as__builtin__.SwigPyObjec
вместе с множеством ошибок от pickle.py. Помимо этой практической проблемы, я не совсем понимаю, почему что-то, кроме конечного результата myfunc, вообще маринуется.
dill
не работает со Swig из коробки. См. этот вопрос, в котором есть решение для делая объекты Swig доступными для обработки. Возможно, вы сможете использовать его. - person dano   schedule 18.03.2015