マルチプロセス: プロセス間辞書共有
複数のプロセスが共有キュー 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 サイトの他の関連記事を参照してください。