我有一个不能腌制的类 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 对象从子进程传递到其父进程。任何想法如何解决这个问题?
注意:我无法更改内部课程。