-2

这是主要代码:

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() 的答案共享 dict。我的问题已经使用 Manager.dict() 并且由于异常而失败。谢谢你。

4

1 回答 1

1

从代码中的注释可以看出,在mydict里面被正确读取func()但无法对其进行变异。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)
于 2017-09-05T10:00:18.523 回答