我正在尝试更新多处理模块 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': {'status': 'ongoing', 'fail': 0, 'repeat': 5, 'success': 5}}
我的期望是,一旦 while 循环结束,它应该使 d['abc']['status'] = 完成。但在最终打印时,它仅将其状态打印为“进行中”。