ホームページ >バックエンド開発 >Python チュートリアル >複数の子プロセスによってアクセスされるグローバル ディクショナリ内のデータの一貫性を確保するにはどうすればよいですか?

複数の子プロセスによってアクセスされるグローバル ディクショナリ内のデータの一貫性を確保するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-15 01:26:11346ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

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