Pythonでは、スレッドを停止するための直接的なAPIは提供されていません。しかし、threading.Event
のような共有のブール変数を使用して、この機能をコードに直接追加することができます。
threading.Event
は、スレッドセーフなブール変数フラグを持つクラスで、このフラグはセットまたは非セットにすることができます。デフォルトでは、内部フラグはFalse
に設定されています。Event
クラスでは、set()
メソッドで内部フラグをTrue
に設定し、clear()
メソッドでフラグをFalse
にリセットします。
以下に、Event
オブジェクトを使用してメインスレッドから子スレッドを停止する方法を示します。
from threading import Thread, Event
from time import sleep
def task(event: Event) -> None:
for i in range(6):
print(f'Running #{i+1}')
sleep(1)
if event.is_set():
print('The thread was stopped prematurely.')
break
else:
print('The thread was stopped maturely.')
def main() -> None:
event = Event()
thread = Thread(target=task, args=(event,))
thread.start()
sleep(3)
event.set()
if __name__ == '__main__':
main()
このコードでは、task()
関数はEvent
オブジェクトを使用し、None
を返します。この関数は子スレッドで実行されます。task()
関数は、1から5までの数値を反復処理します。各反復で、sleep()
関数を使用して実行を遅延させ、event
オブジェクトの内部フラグがセットされている場合にループを終了します。
この記事がPythonのスレッドを停止する方法についての理解を深める助けになれば幸いです。