zch*_*odd 13 python multiprocessing
我正在使用Python多处理模块将对象放入队列并让它们由多个工作人员处理.我的第一个问题是获取绑定的实例方法,我已经工作了,但现在我遇到了由对象使用的事实引起的单独问题__slots__.
当mp模块去腌制对象时,它似乎使用了旧的ascii pickle协议,无法处理__slots__.较新的协议确实处理了这个问题,但我不确定如何让mp模块使用这个协议.
有人对此有经验吗?
ekh*_*oro 11
如果无法更改多处理程序包使用的pickle协议,则定义__getstate__并__setstate__为您的对象:
import pickle
class Foo(object):
__slots__ = ['this', 'that', 'other']
def __init__(self):
self.this = 1
self.that = 2
self.other = 3
def __getstate__(self):
return dict((name, getattr(self, name))
for name in self.__slots__)
def __setstate__(self, state):
for name, value in state.items():
setattr(self, name, value)
pickle.dumps(Foo(), protocol=0)
Run Code Online (Sandbox Code Playgroud)