将对象插入到多处理管理器中,字典



我在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

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

编辑:挂在Linux上,但适用于Windows。蟒蛇 3.7.3

用普通字典更新你的 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)

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

对于您发布的代码,简单的修复是:

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

(通常不鼓励使用import *(

但我想你可能想做的不止这些,所以修复会更复杂。

最新更新