多處理:進程間字典共享
考慮多個進程在共享隊列Q 上操作並操作全域字典的場景令人驚訝的是,儘管在子進程中觀察到了修改,但在加入Q 後訪問D 會顯示一個空字典。
此行為源自於同步問題。每個進程都在自己的記憶體空間上運行,子進程中對 D 所做的更改不會自動反映在主進程中。為了解決這個問題,同步措施是必要的。
解決方案:使用 Manager 物件
Python 標準函式庫提供了使用 Manager 物件的解決方案。該物件提供對進程間共享資料的同步存取:
from multiprocessing import Process, Manager def f(d): d[1] += '1' d['2'] += 2 if __name__ == '__main__': manager = Manager() d = manager.dict() d[1] = '1' d['2'] = 2 p1 = Process(target=f, args=(d,)) p2 = Process(target=f, args=(d,)) p1.start() p2.start() p1.join() p2.join() print(d)
在此範例中,Manager 物件的 dict() 方法會建立一個共用字典 d,所有進程都可以存取該字典。子進程中對 d 所做的變更會透過 Manager 物件管理的共享記憶體傳播到主進程。
輸出:
$ python mul.py {1: '111', '2': 6}
以上是如何在Python中的多個進程之間共享和修改字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!