ホームページ  >  記事  >  バックエンド開発  >  Python の複数のプロセス間で辞書を共有および変更するにはどうすればよいですか?

Python の複数のプロセス間で辞書を共有および変更するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-14 17:44:02708ブラウズ

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

マルチプロセス: プロセス間辞書共有

複数のプロセスが共有キュー Q 上で動作し、グローバル ディクショナリを操作するシナリオを考えてみましょう。 、D. 驚くべきことに、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。