【Python】マルチスレッドを途中で強制終了させる方法

マルチスレッドのプログラミングにおいて、スレッドの終了方法と強制終了方法を学びます。

スレッドの終了方法では、処理が完了するか条件が満たされるまでスレッドを実行し、スレッドの強制終了方法では、途中でスレッドを終了させる方法を解説します。

目次から探す

マルチスレッドの強制終了について

マルチスレッドは、複数のスレッドを同時に実行することができる機能です。

しかし、時にはスレッドを途中で強制終了させる必要が生じることもあります。

スレッドの終了方法

まず、スレッドの終了方法について説明します。

通常、スレッドは処理が完了するか、指定された条件が満たされるまで実行されます。

しかし、スレッドを途中で終了させたい場合は、以下の方法を使用することができます。

import threading
def my_thread_func():
    # スレッドの処理内容を記述する
# スレッドの作成
my_thread = threading.Thread(target=my_thread_func)
# スレッドの開始
my_thread.start()
# スレッドの終了待ち
my_thread.join()

上記のコードでは、threading.Threadクラスを使用してスレッドを作成し、start()メソッドでスレッドを開始します。

そして、join()メソッドを呼び出すことで、スレッドの終了を待ちます。

この方法を使うことで、スレッドを正常に終了させることができます。

スレッドの強制終了方法

一方、スレッドを途中で強制終了させたい場合は、threadingモジュールのThreadクラスには終了フラグを設定する方法があります。

以下のように、終了フラグをチェックしながらスレッドを実行し、終了フラグが設定された場合にスレッドを終了させることができます。

import threading
# 終了フラグ
exit_flag = False
def my_thread_func():
    while not exit_flag:
        # スレッドの処理内容を記述する
# スレッドの作成
my_thread = threading.Thread(target=my_thread_func)
# スレッドの開始
my_thread.start()
# スレッドの終了フラグを設定
exit_flag = True
# スレッドの終了待ち
my_thread.join()

上記のコードでは、exit_flagという終了フラグを設定し、my_thread_func()内でそのフラグをチェックしています。

終了フラグがTrueに設定された場合、スレッドは終了します。

外部で管理されているフラグを用いてスレッドの終了判定をするというごくシンプルな方法ですが、PythonではOS nativeのスレッドを使用しているため(言語仕様として強制終了させる方法が提供されていない)、この方法を採用するのが多いです。

スレッド内で例外を発生させる方法もありますが、コードによっては煩雑で可読性が低下する可能性があります

この方法を使うことで、スレッドを途中で強制終了させることができます。

目次から探す