【问题标题】:Can't Pickle Wrapper Class Object不能腌制包装类对象
【发布时间】:2019-03-10 15:50:54
【问题描述】:

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

self.obs = Observer(self.guess)

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

obs = Observer(self.guess)

它有效,但如果我写 self.obs,我会得到 ​​p>

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() where

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

【问题讨论】:

  • 需要更多信息:什么是p,它的start() 方法有什么作用?您可能会从阅读this article 中关于提问的内容中受益。然后也许编辑你的问题。

标签: python multiprocessing pickle python-multiprocessing


【解决方案1】:

我实际上解决了这个问题。我想问题出在我的选择器类的所有 self.___ 方法/属性上。我创建了一个额外的类 selector_wrapper,它带有一个创建和运行选择器类的 init 方法。这非常有效。

总之,创建一个除了 init 之外没有其他方法且没有属性的包装类,解决了这个问题!

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 2018-10-30
    • 2022-07-16
    • 2021-08-18
    • 2020-06-26
    • 2017-02-22
    • 1970-01-01
    • 2019-12-14
    • 2016-10-22
    相关资源
    最近更新 更多