ホームページ >バックエンド開発 >Python チュートリアル >オペレーティング システムごとに同期変数の動作が異なる
SEO:
Python のマルチプロセッシング ライブラリには、異なるプロセス間でデータを共有するために使用されるラッパー タイプである multiprocessing.sharedctypes.synchronized があり、デフォルトでは、データの一貫性を維持するためにリエントラント ロック RLock が使用されます。今回 Python を再学習する前に、私は Python 3.6 を使用していました。その時点では mp ライブラリについて表面的な知識はありましたが、さまざまなオペレーティング システムでのマルチプロセス プログラムの動作の違いや、その影響について深く検討していませんでした。
今回の勉強中に問題が発生しました。macOS システム上で Python 3.12 を使用してグローバル コンテキストで multiprocessing.sharedctypes.Value 変数を作成すると、新しいプロセスでこの変数にアクセスすると、その値の同期が行われません。異なるプロセス間で維持されます。 Eric Greene 教師と話し合った結果、Python 3.8 以降、さまざまなオペレーティング システムで新しいプロセスを作成する方法が変更されたことがわかりました。
私の例では、Synchronized 変数は親プロセスでグローバルに宣言されているため、Windows および macOS システムでは子プロセスに継承されず、Linux システムでは値が異なります。 、親プロセスのすべてのリソースが継承されるため、子プロセスはその値を変更できます。
これにより、私が見た現象が発生しました。macOS 上の私のコードのグローバル同期変数は変更されませんでしたが、他の人の Linux システムは正常に実行され、変数はすべてのプロセス間で同期されました。
参考資料:
以上がオペレーティング システムごとに同期変数の動作が異なるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。