1

我有一个不能腌制的类 Inner 和一个类 Outer ,它包含一个我想通过管道或队列在进程之间共享的 Inner 实例。由于 Inner 类,我无法这样做,所以我尝试从 BaseManager 创建一个代理对象,我将共享它而不是 Inner。

我尝试了以下代码,但现在尝试从管理器检索代理对象时出现酸洗错误。

from multiprocessing import Queue, Process, managers.BaseManager

class MyManager(BaseManager):
    pass

MyManager.register('Outer', Outer, exposed=['foo'])

class Project:
   def __init__():
      self._manager = MyManager()
      self._manager.start()
      self._queue = Queue()
      self._ready = False

    def validate():
        while True:
            if self._ready:
                outer_manager = self._queue.get()
                break

    def worker():
        outer_proxy = self._manager.Outer() #PicklingError: Can't pickle <class Inner>
        self._queue.put(outer_proxy)
        self._ready = True

def main():
    project = Project()

我在这里看到了一些解决方案,我将这段代码放在一起,但没有一个人提到管理器创建时出现错误。我的最终目标是能够将 Outer 对象从子进程传递到其父进程。任何想法如何解决这个问题?

注意:我无法更改内部课程。

4

0 回答 0