正在運作的執行緒可以突然終止嗎?
雖然這通常不是一個好方法,但在 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中文網其他相關文章!