不能腌制包装类对象

时间:2019-03-10 15:50:55

标签: python multiprocessing pickle python-multiprocessing

所有,我正在尝试使用多处理来并行化一些代码,并且我将代码剥离下来以便注释主类的行

self.obs = Observer(self.guess)

使系统运行无错误。如果我写

obs = Observer(self.guess)

它有效,但是如果我写self.obs,我会得到

TypeError: can't pickle Observer objects

这是我要导入的整个课程。它只是ephem.Observer的包装,在导入时有相同的错误。

import numpy as np 
from req import SETTINGS
from req.helpers import load_db, pack_into_vector, create_observer 

class Observer:
        def __init__(self, beta=np.zeros((2,))):
            self.observer = create_observer(beta)
            return

        def __getstate__(self):
            return {'observer': self.observer}

该错误发生在p.start()上,

p = Process(target=selector,args=(first_guess, recording_queue, guess_queue))

1 个答案:

答案 0 :(得分:0)

我实际上解决了这个问题。我想问题出在选择器类的所有self .___方法/属性上。我用创建并运行选择器类的init方法创建了一个附加类,selector_wrapper。这工作得很好。

总而言之,创建一个除了init之外没有任何方法且没有属性的包装器类,可以解决此问题!