実行中のスレッドは突然終了できますか?
一般的には良いアプローチではありませんが、Python では実行中のスレッドを突然終了することができます。 。ただし、このアプローチは普遍的に適用できるわけではありません。
正常な終了に関する考慮事項
次のシナリオを考慮してください。
これらの場合、ターゲット スレッドによって定期的にチェックされる exit_request フラグを使用して、必要に応じて終了をトリガーすることをお勧めします。
正常な終了のコード例:
import threading class StoppableThread(threading.Thread): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._stop_event = threading.Event() def stop(self): self._stop_event.set() def stopped(self): return self._stop_event.is_set()
スレッドが終了する必要があるときに stop() を呼び出し、次に join() を呼び出して適切であることを確認します。
スレッドの強制終了
場合によっては、スレッドの強制終了が必要になる場合があります。長時間の遅延を引き起こす外部ライブラリ呼び出しを検討してください。
ThreadWithExc を使用した例外の発生
ThreadWithExc クラスを使用すると、スレッド内で別のスレッドから例外を発生させることができます:
def _async_raise(tid, exctype): # Raises an Exception (exctype) in thread with ID (tid) if not inspect.isclass(exctype): raise TypeError("Only types can be raised (not instances)") class ThreadWithExc(threading.Thread): def raise_exc(self, exctype): # Raises exctype in the context of the current thread _async_raise(self._get_my_tid(), exctype)
スレッドが Python インタープリターの外部にある場合、このメソッドは信頼できないことに注意してください。必要なクリーンアップを実行するには、スレッドが特定の例外をキャッチしていることを確認してください。
以上が実行中の Python スレッドは正常にまたは強制的に停止できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。