我想更新多处理模块的manager.dict()嵌套字典中的键,但无法更新。它不会更新该值,也不会抛出任何错误。无法更新multiprocessing的manager.dict中的嵌套字典值()
代码:
import time
import random
from multiprocessing import Pool, Manager
def spammer_task(d, token, repeat):
success = 0
fail = 0
while success+fail<repeat:
time.sleep(random.random()*2.0)
if (random.random()*100)>98.0:
fail+=1
else:
success+=1
d[token] = {
'status': 'ongoing',
'fail': fail,
'success': success,
'repeat': repeat
}
print d[token]['status']
d[token]['status'] = 'complete'
return
p = Pool()
m = Manager()
d = m.dict()
p.apply_async(spammer_task (d, 'abc', 5))
print d
输出:
持续
{ 'ABC':{ '地位': '正在进行', '失败':0, '重复': 5, '成功':5}}
我的期望是,一旦while循环结束,应该使d [ 'ABC'] [ '状态'] = COM plete。但是在最终的印刷品上,它仅将其状态显示为“正在进行中”。
谢谢,没有其他解决方案使用额外的内存? 我打算在HTTP服务器内对这个多处理器进行deamonize处理,并且不想为它们处理额外的内存+清理。 – MohitC
根据这部分文档中的注释:https://docs.python.org/2/library/multiprocessing.html#using-a-remote-manager - 上述似乎是建议的方式来做到这一点。 – domoarrigato
@domoarrigato发布的说明已过期 - 但的确,官方的Python文档声明此答案是正确的。这里是新的链接 - 向下滚动以找到'Note':https://docs.python.org/2/library/multiprocessing.html#managers –