我有一个不能被pickle的类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()
我在这里看到了一些解决方案,我将这些代码放在一起,但是没有一个解决过从管理器创建时出现的错误。 我的最终目标是能够将子对象从子进程传递到其父进程。 任何想法如何解决这个问题?
注意:我无法更改Inner class。