首頁 > 後端開發 > Python教學 > 正在運行的 Python 執行緒可以正常停止還是強制停止?

正在運行的 Python 執行緒可以正常停止還是強制停止?

Linda Hamilton
發布: 2025-01-01 09:45:10
原創
694 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板