Python 3におけるスレッドの終了方法
Python 3では、スレッドを終了させる方法として、スレッドを停止させるためのフラグを使用する方法や、スレッドを強制終了させる方法があります。
1. フラグを使用したスレッドの終了
スレッドを終了させるためには、スレッド内で定期的にフラグをチェックし、フラグが立っている場合にスレッドを終了させるようにします。
import threading import time # スレッドが終了するかどうかを管理するフラグ stop_flag = False def my_thread_function(): global stop_flag while not stop_flag: print("Running...") time.sleep(1) print("Thread stopped.") # スレッドを作成して開始 my_thread = threading.Thread(target=my_thread_function) my_thread.start() # 5秒後にスレッドを終了させる time.sleep(5) stop_flag = True
上記の例では、`stop_flag`が`True`になるとスレッドが終了します。
2. スレッドを強制終了する方法
スレッドを強制終了する方法として、`Thread`オブジェクトの`terminate()`メソッドを使用する方法があります。
import threading import time def my_thread_function(): while True: print("Running...") time.sleep(1) # スレッドを作成して開始 my_thread = threading.Thread(target=my_thread_function) my_thread.start() # 5秒後にスレッドを強制終了 time.sleep(5) my_thread.terminate()
ただし、`terminate()`メソッドはPythonの標準ライブラリには含まれておらず、スレッドを安全に終了させる方法ではないため、避けることが推奨されています。
3. `threading.Event`を使用したスレッドの終了
もう1つの方法として、`threading.Event`を使用してスレッドの終了を制御する方法があります。
import threading import time stop_event = threading.Event() def my_thread_function(): while not stop_event.is_set(): print("Running...") time.sleep(1) print("Thread stopped.") # スレッドを作成して開始 my_thread = threading.Thread(target=my_thread_function) my_thread.start() # 5秒後にスレッドを終了させる time.sleep(5) stop_event.set()
上記の例では、`stop_event`がセットされるとスレッドが終了します。