Pythonマルチスレッドをどのように閉じるか
Pythonでマルチスレッドを閉じる方法:
- フラグによるスレッド終了の制御: 全局変数かクラス属性をフラグとして設定しておき、プログラムを終了する処理が行われた場合はそれをTrueにすることで、タスクの実行ループでそのフラグの値を判定し、Trueであればループから抜けてスレッドを終了させます。
import threading
stop_flag = False
def my_thread_func():
while not stop_flag:
# 线程执行的任务
pass
# 启动线程
thread = threading.Thread(target=my_thread_func)
thread.start()
# 设置标志位使线程退出
stop_flag = True
- スレッドオブジェクトのjoinメソッドを使用してメインスレッドをブロックし、子スレッドの実行を待つことで、スレッドの終了を実現できる。
import threading
def my_thread_func():
# 线程执行的任务
pass
# 启动线程
thread = threading.Thread(target=my_thread_func)
thread.start()
# 等待线程执行完毕
thread.join()
- スレッドオブジェクトの `setDaemon` メソッドを利用してスレッドをデーモンスレッドに設定します。デーモンスレッドに設定したスレッドは、メインスレッドが終了すると自動的に終了します。
import threading
def my_thread_func():
# 线程执行的任务
pass
# 启动线程并设置为守护线程
thread = threading.Thread(target=my_thread_func)
thread.setDaemon(True)
thread.start()
# 主线程执行完毕后,守护线程会自动退出
念のためですが、それらの方法はカスタムで作ったスレッドの場合にのみ有効で、pythonに組み込まれたスレッド(タイマー、スレッド等)には使えません。また、スレッドの止め方には制限やリスクがあるので、マルチスレッドを使う際には、スレッドの停止を慎重に行う必要があります。