スレッドを強制的に終了または一時停止する方法はありません。スレッド プログラムの作成は本質的に複雑であるため、これは仕様によるものです。例: スレッドがロックを取得した場合、ロックを解放する前にスレッドを強制的に終了または一時停止すると、アプリケーション全体でデッドロックが発生します。さらに、複雑なスレッドの同期にはロック操作やロック解除操作が含まれることが多く、実行時のこれらの操作の順序は非常に正確である必要があるため、一般に終了では単純に「すべてのロックを解放」することはできません。
終了や一時停止のサービスを提供したい場合は、これらの機能を自分で構築する必要があります。一般的なアプローチは、スレッドのステータスを定期的にチェックして終了する必要があるかどうかを判断するループでスレッドを実行することです。例:from threading import Thread,Lock class StoppableThread(Thread): def __init__(self): Thread.__init__(self) self._terminate=False self._suspend_lock=Lock() def terminate(self): self._terminate=True def suspend(self): self._suspend_lock.acquire() def resume(self): self._suspend_lock.release() def run(self): while True: if self._terminate: break self._suspend_lock.acquire() self._suspend_lock.release() ...
このメソッドが確実に動作するには、スレッドがいかなる種類のブロッキング I/O 操作も実行しないように細心の注意を払う必要があることに注意してください。たとえば、スレッドがデータの到着を待ってブロックした場合、操作が起動されるまでスレッドは終了しません。したがって、実際には、タイムアウト、ノンブロッキング I/O、およびその他の高度な機能を使用して、終了チェックが十分な頻度で実行されるようにする必要があります。
関連する推奨事項:
Python での Threadpool スレッド プール タスク終了サンプル コードの詳細な説明
マルチスレッド スレッドPython でのスレッド化と実装方法
以上がPython でスレッドの終了と一時停止を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。