所有,我正在尝试使用多处理来并行化一些代码,并且我将代码剥离下来以便注释主类的行
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))
答案 0 :(得分:0)
我实际上解决了这个问题。我想问题出在选择器类的所有self .___方法/属性上。我用创建并运行选择器类的init方法创建了一个附加类,selector_wrapper。这工作得很好。
总而言之,创建一个除了init之外没有任何方法且没有属性的包装器类,可以解决此问题!