Python では、潜在的なリソースの問題のため、スレッドの終了は通常推奨されません。ただし、強制終了が必要な場合もあります。
ベスト プラクティスには、スレッドが定期的にチェックする終了フラグを設定して、正常な終了を可能にすることが含まれます。たとえば、stoppableThread クラスを exit_request フラグとともに使用すると、スレッドが終了を確認し、それに応じて終了できます。
class StoppableThread(threading.Thread): def __init__(self, *args, **kwargs): super(StoppableThread, self).__init__(*args, **kwargs) self._stop_event = threading.Event() def stop(self): self._stop_event.set() def stopped(self): return self._stop_event.is_set()
極端な場合は、スレッドを直接終了します。必要です。ただし、スレッドが重要なリソースを保持している場合、このアプローチにはリスクが伴います。
1 つの方法では、_async_raise 関数を使用してスレッドで例外を発生させます。これにより、例外が非同期に発生し、スレッドが例外をキャッチして適切に処理できるようになります。
def _async_raise(tid, exctype): res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(tid), ctypes.py_object(exctype)) ... class ThreadWithExc(threading.Thread): def raise_exc(self, exctype): _async_raise(self._get_my_tid(), exctype )
スレッドを突然強制終了すると、リソース リークやタスクの実行が不完全になる可能性があります。したがって、強制終了のアプローチを慎重に採用し、常に正常な終了を優先することが重要です。さらに、スレッドが集中的な操作を実行している場合、_async_raise メソッドは常に有効であるとは限りません。
以上がPython でスレッドを正常かつ強制的に強制終了する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。