这是主要代码:
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(),并且由于异常而失败。谢谢。
答案 0 :(得分:0)
从代码中的注释可以看出,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)