Pythonのthreading
モジュールは、スレッドベースの並行処理を提供します。この記事では、特にwait()
とset()
メソッドの使用に焦点を当て、それらがどのように動作するかを説明します。
threading.Eventの基本
threading.Event
は、イベントが発生するまでスレッドを待機させ、他のスレッドからイベントを発生させると待機スレッドが再開する、という使い方をするためのクラスです。最も重要なメソッドは以下の2つです。
wait()
: イベントが発生するかタイムアウトになるまで現在のスレッドを待機させます。set()
: イベントを発生させ、待機スレッドを再開させます。
from threading import Event
import time
event = Event()
def event_example():
print("スレッド開始")
event.wait()
print("スレッド終了")
thread = Thread(target=event_example)
thread.start()
time.sleep(3)
print("イベント発生")
event.set()
上記のコードでは、新しいスレッドが開始され、event.wait()
によりイベントの発生を待ちます。メインスレッドはスレッドの開始から3秒後にevent.set()
を呼び出し、イベントを発生させます。これにより、待機していたスレッドが再開し、”スレッド終了”を出力します。
タイムアウトを指定する
wait()
メソッドにタイムアウトを指定すると、イベントが発生しなくても指定した秒数が経過するとスレッドが再開します。wait()
の戻り値は、イベントが発生したときにはTrue、それ以外ではFalseになります。
event = Event()
def event_example():
print("スレッド開始")
while not event.wait(2):
print("まだだよ")
print("スレッド終了")
thread = Thread(target=event_example)
thread.start()
time.sleep(5)
print("イベント発生")
event.set()
上記のコードでは、新しいスレッドが開始され、event.wait(2)
により2秒間イベントの発生を待ちます。イベントが発生しない場合、”まだだよ”を出力し、再度イベントの発生を待ちます。メインスレッドはスレッドの開始から5秒後にevent.set()
を呼び出し、イベントを発生させます。これにより、待機していたスレッドが再開し、”スレッド終了”を出力します。
以上がPythonのthreading.Event
のwait()
とset()
メソッドの基本的な使い方です。これらを理解することで、Pythonでのマルチスレッドプログラミングがより理解しやすくなるでしょう。