正在运行的线程可以突然终止吗?
虽然这通常不是一个好方法,但在 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中文网其他相关文章!