Python を使用したプロセス間でのロックの共有
マルチスレッド アプリケーションでは、ロックは共有リソースへのアクセスを同期するために重要です。ただし、これらのプロセスが複数の子プロセスに分散されている場合、それらの間でロックを共有することが困難になる可能性があります。
問題:
multiprocessing.Lock を利用する関数を考えてみましょう。 () オブジェクト (l) は、重要なリソースへのアクセスを管理します。ワーカー プロセスのプール (pool) とロックを引数として渡す部分関数 (func) を作成した後、pool.map() を使用してタスクを複数のプロセスに分散しようとすると、実行時エラーが発生します。「オブジェクトをロックする」継承を通じてプロセス間でのみ共有する必要があります。
要素が欠落しています:
デフォルトでは、Python が通常の multiprocessing.Lock() インスタンスを安全にピクルできないためにエラーが発生します。
解決策:
この制限を克服し、プロセス間でロックを正常に共有するには、2 つの実行可能なアプローチが存在します:
Manager オブジェクトの使用:
プール作成時のロックの受け渡し:
コード例 (2 番目の解決策を使用):
<code class="python">from multiprocessing import Pool, Lock def init(l): global lock lock = l def target(iterable_item): # Access shared resources using lock def main(): l = Lock() pool = Pool(initializer=init, initargs=(l,)) pool.map(target, iterable) pool.close() pool.join()</code>
次の方法によってを使用すると、プロセス間でロックを効果的に共有でき、分散 Python アプリケーションでの同期とデータ共有が可能になります。
以上がPython マルチプロセッシング アプリケーションでプロセス間でロックを共有する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。