Python プロセス間でロックを共有する
複数のプロセス間でロックを使用しようとすると、「ロック オブジェクトは継承を通じてプロセス間で共有されます。」
これを解決するには、主に 2 つの方法があります。アプローチ:
Manager の使用
このアプローチには、Manager オブジェクトを作成し、マルチプロセッシング インポート マネージャーから Manager.Lock():
from multiprocessing import Manager ... m = Manager() l = m.Lock()
ただし、Manager を使用すると、Manager サーバーをホストし、IPC 経由で通信するための追加プロセスが必要になります。
プールでのロックの受け渡しCreation
別の方法は、プールの作成時に初期化キーワードを使用して通常の multiprocessing.Lock() を渡すことです。引数:
def init(l): global lock lock = l l = multiprocessing.Lock() pool = multiprocessing.Pool(initializer=init, initargs=(l,))
このメソッドは、ロック インスタンスをすべての子ワーカーでグローバルにします。このアプローチでは、部分関数が必要なくなることに注意してください。
これらの手法のいずれかを採用すると、Python プロセス間でロックを効果的に共有でき、共有リソースへの調整されたアクセスが可能になります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3