我想更新多處理模塊的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 –