Python: 如何分享不可拾取的对象
Python: How to share an Unpickable Object
我正在做一些多处理,我需要在两个进程之间共享一个实例。我一直在尝试使用 multiprocessing 模块来尝试完成此操作,但似乎没有太大希望分享任何无法腌制的东西;到目前为止,我已经尝试使用一个管理器并创建一个代理对象来按照 this SO question and this SO question 来处理我的对象。我知道共享可变对象实例并不完全是 python 的强项,但最简单的方法是什么?
为了更清楚地说明我的情况,我只在 UNIX 系统上工作,因此根据我的理解,它使用分叉和写时复制内存管理。我需要共享的这个对象在主进程上是只读的,但在子进程上是读写的。我能想到的最简单的方法是将内存中对象实例的引用共享给子进程,并在进程之间进行通信,而不是在主进程使用对象时写入。
我自己解决了这个问题,但是对于任何遇到同样问题的人来说:
我错误地实例化了一个 SyncManager() object then calling the BaseManager.register() method assuming this would work since SyncManager is just a subclass of BaseManager(). I didn't look into exactly why this is the case, but I do know the fix, and that is to just instantiate a BaseManager() 并用它注册了你的 Python 对象。
我正在做一些多处理,我需要在两个进程之间共享一个实例。我一直在尝试使用 multiprocessing 模块来尝试完成此操作,但似乎没有太大希望分享任何无法腌制的东西;到目前为止,我已经尝试使用一个管理器并创建一个代理对象来按照 this SO question and this SO question 来处理我的对象。我知道共享可变对象实例并不完全是 python 的强项,但最简单的方法是什么?
为了更清楚地说明我的情况,我只在 UNIX 系统上工作,因此根据我的理解,它使用分叉和写时复制内存管理。我需要共享的这个对象在主进程上是只读的,但在子进程上是读写的。我能想到的最简单的方法是将内存中对象实例的引用共享给子进程,并在进程之间进行通信,而不是在主进程使用对象时写入。
我自己解决了这个问题,但是对于任何遇到同样问题的人来说:
我错误地实例化了一个 SyncManager() object then calling the BaseManager.register() method assuming this would work since SyncManager is just a subclass of BaseManager(). I didn't look into exactly why this is the case, but I do know the fix, and that is to just instantiate a BaseManager() 并用它注册了你的 Python 对象。