不可挑选的对象共享和代理对象创建

时间:2017-08-07 06:05:23

标签: python proxy python-multiprocessing shared-variable

我有一个不能被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。

0 个答案:

没有答案