検索
ホームページバックエンド開発Python チュートリアルオペレーティング システムごとに同期変数の動作が異なる

Synchronized 变量在不同操作系统的不同行为

SEO:

  • Python 同期変数値はグローバル コンテキストでは変更されません
  • 同期された値はメインプロセスで変更されません
  • 同期された値はプロセス間で共有されません

Python のマルチプロセッシング ライブラリには、異なるプロセス間でデータを共有するために使用されるラッパー タイプである multiprocessing.sharedctypes.synchronized があり、デフォルトでは、データの一貫性を維持するためにリエントラント ロック RLock が使用されます。今回 Python を再学習する前に、私は Python 3.6 を使用していました。その時点では mp ライブラリについて表面的な知識はありましたが、さまざまなオペレーティング システムでのマルチプロセス プログラムの動作の違いや、その影響について深く検討していませんでした。

今回の勉強中に問題が発生しました。macOS システム上で Python 3.12 を使用してグローバル コンテキストで multiprocessing.sharedctypes.Value 変数を作成すると、新しいプロセスでこの変数にアクセスすると、その値の同期が行われません。異なるプロセス間で維持されます。 Eric Greene 教師と話し合った結果、Python 3.8 以降、さまざまなオペレーティング システムで新しいプロセスを作成する方法が変更されたことがわかりました。

  • Linux システムは常にフォークを使用して新しいプロセスを作成します。フォーク中、親プロセスのすべてのリソースが子プロセスに継承されるため、親プロセスでグローバルに定義された同期変数には子プロセスからもアクセスできるため、データの一貫性が維持されます
  • Windows システムは常に spawn を使用します。これは、マルチ処理を実装するために新しい Python インタープリター プロセスを作成する方法です。これは Python を「さらに開く」ことに相当するため、オーバーヘッドが増加し、効率が低下しますが、これは Windows システム自体の制限です。この場合、子プロセス は、親プロセス の run() メソッドが新しいプロセスを開始するために必要なリソースのみを継承します。
  • macOS システムは、Python 3.8 より前は fork を使用していましたが、 は spawn に変更されたため、いくつかのマルチプロセスの動作が変更されました。 (macOS はフォークを使用するように設定できますが、Python は公式には推奨されていません)

私の例では、Synchronized 変数は親プロセスでグローバルに宣言されているため、Windows および macOS システムでは子プロセスに継承されず、Linux システムでは値が異なります。 、親プロセスのすべてのリソースが継承されるため、子プロセスはその値を変更できます。

これにより、私が見た現象が発生しました。macOS 上の私のコードのグローバル同期変数は変更されませんでしたが、他の人の Linux システムは正常に実行され、変数はすべてのプロセス間で同期されました。

参考資料:

  • https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
  • https://docs.python.org/3/library/multiprocessing.html#multiprocessing.sharedctypes.synchronized

以上がオペレーティング システムごとに同期変数の動作が異なるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

Pythonに工場パターンを実装すると、統一されたインターフェイスを作成することにより、さまざまな種類のオブジェクトを作成できます。特定の手順は次のとおりです。1。車両、車、飛行機、列車などの基本クラスと複数の継承クラスを定義します。 2。Factory Class CheerFactoryを作成し、Create_Vehicleメソッドを使用して、型パラメーターに従って対応するオブジェクトインスタンスを返します。 3。my_car = factory.create_vehicle( "car"、 "tesla"など、工場クラスを介してオブジェクトをインスタンス化します。このパターンは、コードのスケーラビリティと保守性を向上させますが、その複雑さに注意を払う必要があります

Python Original Stringプレフィックスではrの意味がありますPython Original Stringプレフィックスではrの意味がありますMay 16, 2025 pm 12:36 PM

Pythonでは、RまたはRプレフィックスを使用して元の文字列を定義し、逃げたすべての文字を無視し、文字列を文字通り解釈します。 1)脱出キャラクターの誤解を避けるために、正規表現とファイルパスに対処するために適用されます。 2)ラインブレークなど、逃げたキャラクターを保存する必要がある場合には適用されません。予期しない出力を防ぐために使用する場合は、慎重なチェックが必要です。

Pythonの__del__メソッドを使用してリソースをクリーンアップする方法は?Pythonの__del__メソッドを使用してリソースをクリーンアップする方法は?May 16, 2025 pm 12:33 PM

Pythonでは、__del__メソッドはオブジェクトの破壊者であり、リソースのクリーンアップに使用されます。 1)不確実な実行時間:ごみ収集メカニズムに依存します。 2)循環参照:それにより、コールを迅速にできなくなり、weakRefモジュールを使用して処理することがあります。 3)例外処理:__del__でスローされた例外は、Try-Exectブロックを使用して無視され、キャプチャされる場合があります。 4)リソース管理のためのベストプラクティス:リソースを管理するためにステートメントとコンテキストマネージャーで使用することをお勧めします。

PythonリストのPOP()関数の使用POP要素削除方法詳細な説明PythonリストのPOP()関数の使用POP要素削除方法詳細な説明May 16, 2025 pm 12:30 PM

POP()関数は、Pythonで使用され、リストから要素を削除し、指定された位置を返します。 1)インデックスが指定されていない場合、POP()はデフォルトでリストの最後の要素を削除および返します。 2)インデックスを指定するとき、POP()はインデックス位置で要素を削除および返します。 3)インデックスエラー、パフォーマンスの問題、代替方法、および使用時のリストの変動に注意してください。

画像処理にPythonを使用する方法は?画像処理にPythonを使用する方法は?May 16, 2025 pm 12:27 PM

Pythonは、主に2つの主要なライブラリピローとOpenCVを使用して画像処理に使用しています。枕は、透かしの追加などの単純な画像処理に適しており、コードはシンプルで使いやすいです。 OpenCVは、優れたパフォーマンスを備えたエッジ検出などの複雑な画像処理とコンピュータービジョンに適していますが、メモリ管理に注意が必要です。

Pythonで主成分分析を実装する方法は?Pythonで主成分分析を実装する方法は?May 16, 2025 pm 12:24 PM

PythonでPCAの実装は、手動でコードを書くか、Scikit-Learnライブラリを使用して実行できます。 PCAの手動での実装には、次の手順が含まれます。1)データの集中、2)共分散行列の計算、3)固有値と固有ベクトルを計算し、4)主成分をソートして選択し、5)データを新しいスペースに投影します。手動の実装は、アルゴリズムを深く理解するのに役立ちますが、Scikit-Learnはより便利な機能を提供します。

Pythonで対数を計算する方法は?Pythonで対数を計算する方法は?May 16, 2025 pm 12:21 PM

Pythonでの対数計算は非常にシンプルですが興味深いことです。最も基本的な質問から始めましょう:Pythonで対数を計算する方法は? Pythonで対数を計算する基本的な方法PythonのMath Moduleは、計算するための関数を提供します。簡単な例を見てみましょう:Importmath#自然対数(base is e)x = 10natural_log = math.log(x)print(f "natural log({x})= {natural_log}")#を計算します。

Pythonで線形回帰を実装する方法は?Pythonで線形回帰を実装する方法は?May 16, 2025 pm 12:18 PM

Pythonで線形回帰を実装するには、複数の視点から開始できます。これは単なる機能呼び出しであるだけでなく、統計、数学的最適化、機械学習の包括的なアプリケーションを伴います。このプロセスに深く飛び込みましょう。 Pythonで線形回帰を実装する最も一般的な方法は、簡単で効率的なツールを提供するScikit-Learnライブラリを使用することです。ただし、線形回帰の原則と実装の詳細をより深く理解したい場合は、独自の線形回帰アルゴリズムをゼロから書くこともできます。 Scikit-Learnの線形回帰実装により、Scikit-Learnを使用して線形回帰の実装をカプセル化し、簡単にモデル化および予測できるようになります。これがSCの使用です

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境