值未存储到 Pool() 内的 Manager().dict() 中

Value is not storing into Manager().dict() inside the Pool()

这是主要代码:

if __name__ == '__main__':
    manager = Manager()
    mylist = manager.list()
    mydict = manager.dict()

    mylist.append('abc')
    mylist.append('xyz')

    for k in mylist:
        mydict[k] = manager.list()

    pool = Pool(processes = 100)
    pool.map(func, arg)
    pool.terminate()

这是 func() 定义:

for x in mylist:
    r = {}
    r['m'] = 1
    r['n'] = 2
    print (r) # gives correct values
    mydict[x].append(dict(r))
    print (mydict) # gives empty list, keys are printed correct

如代码中所述,它正在打印空列表而不是预期值。 如何使这个共享字典和列表正常工作?

第一次打印显示的是预期值。第二次打印显示预期的键,但值部分是空列表。由于它正确显示了密钥,因此共享有效。附加部分存在一些问题。我想不通。

投票失败者,在您认为我的问题与那个问题相同之前,请仔细阅读链接的问题。如果您仍然坚持认为它们是相同的,请发表评论说明您的想法。从我的角度来看,这两个问题是不同的。链接问题询问如何与建议使用 Manager.dict() 的答案共享字典。我的问题已经使用 Manager.dict() 并且由于异常而失败。谢谢。

从代码中的注释可以看出,mydictfunc()里面被正确读取,但是没有变异。 Manger.dict() 对象不能改变嵌套部分。

可以通过创建新字典并在突变后将 mydict 指向它来修复它。

for x in mylist:
    r = {}
    r['m'] = 1
    r['n'] = 2
    print (r)
    foo = mydict[x]
    foo.append(dict(r))
    mydict[x] = foo
    print (mydict)