threading.Event
スレッディング・イベント(標準ライブラリ)
意味 スレッド間同期
threading.Eventとは?
threading.Eventは、スレッド間でイベントを通知するための仕組みです。Eventは、フラグのようなもので、最初はFalseに設定されています。あるスレッドがEventをTrueに設定すると、他のスレッドはそれを検知して処理を進めることができます。
threading.Eventの具体的な使い方
イベントを使用したスレッド間通信
import threading
import time
def worker(event, name):
print(f'{name}: イベント待機中...')
event.wait()
print(f'{name}: イベント受信!処理開始')
time.sleep(2)
print(f'{name}: 処理完了')
def main():
event = threading.Event()
threads = [
threading.Thread(target=worker, args=(event, 'ワーカー1')),
threading.Thread(target=worker, args=(event, 'ワーカー2')),
threading.Thread(target=worker, args=(event, 'ワーカー3'))
]
for t in threads:
t.start()
print('メインスレッド: 3秒後にイベントを設定します')
time.sleep(3)
event.set()
print('メインスレッド: イベントを設定しました')
for t in threads:
t.join()
print('メインスレッド: すべてのワーカーが終了しました')
if __name__ == '__main__':
main()
👇出力結果
ワーカー1: イベント待機中...
ワーカー2: イベント待機中...
ワーカー3: イベント待機中...
メインスレッド: 3秒後にイベントを設定します
メインスレッド: イベントを設定しました
ワーカー1: イベント受信!処理開始
ワーカー2: イベント受信!処理開始
ワーカー3: イベント受信!処理開始
ワーカー1: 処理完了
ワーカー2: 処理完了
ワーカー3: 処理完了
メインスレッド: すべてのワーカーが終了しました
このコードでは、threading.Eventを使用して複数のワーカースレッドを制御しています。メインスレッドがイベントを設定するまで、すべてのワーカースレッドは待機状態になります。イベントが設定されると、全てのワーカーが同時に処理を開始します。これにより、特定のタイミングで複数のスレッドを同時に開始する方法を示しています。
threading.Eventに関するよくある質問
threading.Eventが学べる書籍の紹介
「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Pythonのthreading.Eventやmultiprocessing.Pool、datetime、shelve、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。
よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。
HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。
Pythonを学べる「プログラミング単語帳」アプリ
プログラミング単語帳がアプリになりました!Pythonはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。
収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。
いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。
2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!
2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!