如何在Python中的多個進程之間共享和修改字典?

Susan Sarandon
發布: 2024-11-14 17:44:02
原創
699 人瀏覽過

How to Share and Modify a Dictionary Between Multiple Processes in Python?

多處理:進程間字典共享

考慮多個進程在共享隊列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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板