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']['status'] = complete になるはずです。しかし、最終的な印刷では、ステータスが「進行中」のみとして印刷されます。