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のスレッドを停止する方法についての理解を深める助けになれば幸いです。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です