マルチ処理: グローバル ディクショナリでの同期とデータ共有への対処
マルチスレッド環境では、データの同時アクセスの処理と同期の維持が重要になります。キュー上で動作し、グローバル ディクショナリ 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 中国語 Web サイトの他の関連記事を参照してください。