Python:如何共享一个Unpickable对象

时间:2015-03-13 22:16:45

标签: python multiprocessing python-multiprocessing

我正在做一些多处理,我需要在两个进程之间共享一个实例。我一直在尝试使用多处理模块来尝试实现这一目标,但是没有什么希望能够分享任何看起来不能被腌制的东西;到目前为止,我尝试使用管理器并创建一个代理对象来处理我的对象,方法是this SO questionthis SO question。我知道共享可变对象实例并不完全是python的强项,但最简单的方法是什么?

为了更清楚地布局我的情况,我正在专门研究UNIX系统,因此它根据我的理解使用分叉和写时复制内存管理。我需要共享的这个对象在主进程上是只读的,但在子进程上读写。我能想到这样做的最简单方法是将对内存中对象实例的引用共享给子进程,并在主进程使用对象时不要写入进程之间进行通信。

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题,但对于那个遇到同样问题的人来说也是如此:

我错误地实例化了一个SyncManager()对象,然后调用BaseManager.register()方法,假设这可以工作,因为SyncManager只是BaseManager()的子类。我没有仔细研究为什么会出现这种情况,但我知道修复,那就是实例化一个BaseManager()并用它来注册你的Python对象。