【发布时间】:2015-05-21 05:35:01
【问题描述】:
我正在尝试通过多处理使用类方法并行化代码。基本结构如下:
# 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。请参阅this question,它提供了使 Swig 对象可腌制的解决方案。你也许可以利用它。 -
我必须承认,我什至花了一点时间才知道 SwigPy 对象的来源(我自己没有定义它)。事实证明,我使用的其中一个模块又使用了用 C 编写的数值库。挖掘所有那里看起来很难,但我会试一试。
标签: python pickle python-multiprocessing pathos