python多处理pickle协议

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)