{category}

Python - マルチスレッド

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に関するよくある質問

Q. threading.Eventの主な用途は?
A. threading.Eventの主な用途は、スレッド間で同期を取るためです。あるスレッドが特定の条件を満たしたことを他のスレッドに通知する際に使用します。例えば、タスクの完了や準備が整ったことを伝えるのに適しています。
Q. wait()とset()の役割は?
A. wait()メソッドは、イベントが設定されるまでスレッドを待機させます。set()メソッドは、イベントを設定(True)し、待機中のすべてのスレッドを解放します。これにより、wait()で待機していたスレッドが処理を再開できます。
Q. clear()メソッドの使い方は?
A. clear()メソッドは、イベントの状態をリセット(False)します。これにより、再度wait()で待機できるようになります。イベントを繰り返し使用する場合に、set()の後にclear()を呼び出すことで、イベントを再利用できます。

threading.Eventが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Pythonのthreading.Eventやmultiprocessing.Pool、datetime、shelve、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

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」カテゴリーが追加されましました!


関連するそのほかの単語

multiprocessing.Pool

並列処理で作業を効率化

種類: マルチプロセス

datetime

日付と時刻を扱う

種類: 日付と時間

shelve

辞書のように使えるファイル保存

種類: データ交換

as

別名をつける

種類: モジュールのインポート

pip

Pythonパッケージを管理

種類: パッケージ管理