0

私は最近python3プログラムでthreadingからmultiprocessingに切り替えました。これはうまくいくように見えますが、multiprocessing.Lock()コールは、プログラム内で生成された複数の実行スレッド内で実行されるため、実際に正常に動作しているようです。python3:マルチプロセス.Lock()もスレッドレベルでロックしますか?

しかし、私のプログラム自体は、通常のPythonスレッドを使ってプログラムのインスタンスを別々に実行する別の高次モジュールから呼び出されます。私はそのモジュールのコードを書き換えることはできません。

私は以前、この環境での共有コードを管理するためにthreading.Lock()threading.RLock()を使用していた、そしてそれは同じプロセスの別のスレッド内で呼び出されたときmultiprocessing.Lock()threading.Lock()またはthreading.RLock()と同じことを行います場合、私は思ったんだけど。

ハイブリッドロックメカニズムを実装する必要がありますか?multiprocessingthreadingの環境内で共有リソースがすべて安全であることを確認するにはどうすればいいですか?

ハイブリッドが必要な場合は、次のことで十分ですか? ...

with multiprocessing.Lock(): 
    with threading.Lock(): # threading.RLock() in some cases 
     # code that I want to protect 

...または私は多分、私が書きしなければならない新しいロックコンテキストマネージャを経由して、より洗練された何かを実装しなければならないでしょうか?

ありがとうございます。

答えて

0

私はようやく私の質問への答えを見つけた: Safe to call multiprocessing from a thread in Python?

私は今スレッド環境内からmultiprocessing.Lock()の呼び出しは動作しませんことがわかります。私は以前にハイブリッドmultiprocessing/threadingロックオブジェクトを作成したいくつかのコードをここに掲載しましたが、間違っているのでそのコードを削除しました。

関連する問題