私は最近python3プログラムでthreading
からmultiprocessing
に切り替えました。これはうまくいくように見えますが、multiprocessing.Lock()
コールは、プログラム内で生成された複数の実行スレッド内で実行されるため、実際に正常に動作しているようです。python3:マルチプロセス.Lock()もスレッドレベルでロックしますか?
しかし、私のプログラム自体は、通常のPythonスレッドを使ってプログラムのインスタンスを別々に実行する別の高次モジュールから呼び出されます。私はそのモジュールのコードを書き換えることはできません。
私は以前、この環境での共有コードを管理するためにthreading.Lock()
とthreading.RLock()
を使用していた、そしてそれは同じプロセスの別のスレッド内で呼び出されたときmultiprocessing.Lock()
がthreading.Lock()
またはthreading.RLock()
と同じことを行います場合、私は思ったんだけど。
ハイブリッドロックメカニズムを実装する必要がありますか?multiprocessing
とthreading
の環境内で共有リソースがすべて安全であることを確認するにはどうすればいいですか?
ハイブリッドが必要な場合は、次のことで十分ですか? ...
with multiprocessing.Lock():
with threading.Lock(): # threading.RLock() in some cases
# code that I want to protect
...または私は多分、私が書きしなければならない新しいロックコンテキストマネージャを経由して、より洗練された何かを実装しなければならないでしょうか?
ありがとうございます。