将对象插入Multiprocessing Manager中

时间:2019-06-10 13:13:56

标签: python multiprocessing shared-memory

我在test.py中有以下代码:

manager = multiprocessing.Manager()
cache = manager.dict()

class Test:
    def __init__(self):
        pass

如果我试图将对象插入另一个文件的缓存中,例如

from test import *
cache[1] = 1 #this works
cache[2] = Test() #this fails/hangs

为什么第二种情况失败/挂起?是否可以将对象插入manager.dict()?

编辑:挂在Linux上,但在Windows上工作。 Python 3.7.3

2 个答案:

答案 0 :(得分:0)

使用普通词典更新您的manager.dict()。

tests = {}
test = test()
tests[test.name] = test
# insert other tests in the normal dictionary

obj = multiprocessing.Manager()
obj_tests = obj.dict()
obj_tests.update(tests)

答案 1 :(得分:0)

我认为Manager首先需要start()(或通过with“输入”),即元素设置代码正在等待关联服务器的响应进程,但从未得到响应,因此挂起。无论如何,在Linux下,我远离Windows,所以不想对这种情况发表评论。

您发布的代码的简单解决方法是:

from test import manager, cache, Test
with manager:
    cache[1] = 1
    cache[2] = Test()

(一般不建议使用import *

但是我想您可能想做的比这更多,所以将涉及更多的修复程序。