ホームページ > バックエンド開発 > Python チュートリアル > 実行中の Python スレッドは正常にまたは強制的に停止できますか?

実行中の Python スレッドは正常にまたは強制的に停止できますか?

Linda Hamilton
リリース: 2025-01-01 09:45:10
オリジナル
699 人が閲覧しました

Can a Running Python Thread Be Stopped Gracefully or Forcedly?

実行中のスレッドは突然終了できますか?

一般的には良いアプローチではありませんが、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート