Я пытаюсь распараллелить код с помощью методов класса с помощью многопроцессорной обработки. Базовая структура выглядит следующим образом:Python: (Pathos) Многопроцессорные методы против класса
# 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)
После этого не удалось с нормальным многопроцессорной, я стало известно о проблемах с соленья и многопроцессорных, поэтому я попытался решить эту проблему с multiprocessing.pathos. Тем не менее, я до сих пор получаю
PicklingError: Can't pickle <type 'SwigPyObject'>: it's not found as__builtin__.SwigPyObjec
вместе с множеством ошибок с pickle.py. Помимо этой практической проблемы, я не совсем понимаю, почему ничего, кроме конечного результата myfunc, вообще не маринуют.
Кажется, что 'dill' не работает с Swig из коробки. См. [Этот вопрос] (http://stackoverflow.com/questions/9310053/how-to-make-my-swig-extension-module-work-with-pickle), который имеет решение для создания объектов Swig. Возможно, вы сможете использовать его. – dano
Должен признаться, мне даже понадобился момент, чтобы узнать, откуда идет объект SwigPy (я сам не определял его). Оказывается, один из модулей, которые я использую, в свою очередь, использует числовые библиотеки, написанные на C. Копаем все это выглядит тяжело, но я попробую. – user4319496