[解決済み] Pythonにおけるミューテックスの適切な使用法
2022-02-12 05:24:37
質問
私はpythonでマルチスレッドを始めています(少なくとも私のスクリプトが複数のスレッドを作成する可能性があります)。私はまだこのコードをテストしていませんし、おそらく動作しないでしょう。私はprocessDataをスレッドで実行し(一度に1つ)、メインのwhileループは、キューにスレッドがあっても実行し続けたいだけなのです。
from threading import Thread
from win32event import CreateMutex
mutex = CreateMutex(None, False, "My Crazy Mutex")
while(1)
t = Thread(target=self.processData, args=(some_data,))
t.start()
mutex.lock()
def processData(self, data)
while(1)
if mutex.test() == False:
do some stuff
break
編集:私のコードを読み直すと、それは非常に間違っていることがわかります。しかし、ちょっと、それは私がここで助けを求めている理由です。
どのように解決するのですか?
なぜPythonのミューテックスではなく、Windowのミューテックスを使っているのかわかりません。 Pythonのメソッドを使えば、これはとても簡単なことです。
from threading import Thread, Lock
mutex = Lock()
def processData(data):
mutex.acquire()
try:
print('Do some stuff')
finally:
mutex.release()
while True:
t = Thread(target = processData, args = (some_data,))
t.start()
しかし、CPythonのアーキテクチャのため(すなわち グローバルインタープリターロック I/Oバインドされたスレッドが他のスレッドの実行をブロックしないように、できるだけロックを解放したいところですが。
Python 2.6 以降では、Python の
multiprocessing
パッケージで提供されます。 このパッケージは
threading
パッケージの中で、全く新しいプロセスを作成します。
できる
が同時に実行されます。 あなたの例を更新するのは簡単なことです。
from multiprocessing import Process, Lock
mutex = Lock()
def processData(data):
with mutex:
print('Do some stuff')
if __name__ == '__main__':
while True:
p = Process(target = processData, args = (some_data,))
p.start()
関連
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
PicgoのイメージベッドツールをPythonで実装する
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み] データ型が理解できない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Flaskのテンプレートが見つからない【重複あり