首頁 >後端開發 >Python教學 >如何確保多個子程序存取的全域字典中的資料一致性?

如何確保多個子程序存取的全域字典中的資料一致性?

DDD
DDD原創
2024-12-15 01:26:11343瀏覽

How can I ensure data consistency in a global dictionary accessed by multiple child processes?

多處理:解決全域字典中的同步和資料共享

在多執行緒環境中,處理資料並發存取和維護同步變得至關重要。考慮一個程序,其中有多個子進程在佇列上工作並操作全域字典 D。

當子程序修改 D 時,這些更新在進程內可見。然而,主進程加入佇列後,在主進程中列印D會顯示一個空字典。這是由存取共享資源 D 時的同步問題引起的。

要解決此問題,可以使用 Manager 物件。多處理中的 Manager 類別可以建立和管理共用對象,包括字典。以下調整後的 python 程式碼示範了其用法:

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 對象,共享字典 D 儲存在所有進程都可以存取的共享記憶體位置中。這可以確保同步並防止存取字典時的競爭條件,即使跨多個進程也是如此。

執行此修改後的程式碼應產生以下輸出:

{1: '111', '2': 6}

證明子程序所做的修改即使在加入進程後,共用字典中的內容也是可見且持久的。

以上是如何確保多個子程序存取的全域字典中的資料一致性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn