值未存储到 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() 并且由于异常而失败。谢谢。
从代码中的注释可以看出,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)
这是主要代码:
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() 并且由于异常而失败。谢谢。
从代码中的注释可以看出,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)