线程的关闭方式

终止线程的三种方法

关闭线程通常是一个需要谨慎处理的过程,因为强制终止线程可能会导致程序状态不一致、资源泄露等问题。Python 的标准库中并不直接提供类似于 `thread.terminate()` 这样的方法来强行结束一个正在运行的线程,而是推荐通过设计良好的控制结构优雅地退出线程。 下面是一些常见的做法: ### 使用标志位停止线程 一种常见的方式是,在每个循环周期内检查某个外部变量(比如布尔型),如果该变量被设为特定值,则让线程自然退出其主循环。 ```python import time import threading class StoppableThread(threading.Thread): def __init__(self, *args, **kwargs): super(StoppableThread, self).__init__(*args, **kwargs) self._stop_event = threading.Event() def stop(self): self._stop_event.set() # 设置事件标志,通知线程应当中止 def stopped(self): return self._stop_event.is_set() def worker(): while not thread.stopped(): # 检测是否收到停机信号 print('Thread running...') time.sleep(1) if __name__ == '__main__': thread = StoppableThread(target=worker) thread.start() try: while True: pass except KeyboardInterrupt: # 监听键盘中断以触发线程停止 thread.stop() thread.join() # 等待直到目标线程完全退出后再继续主线程操作 ``` 在这个例子中,我们创建了名为“StoppableThread”的定制版 Thread 子类,它实现了`.stop()`和`.stopped()`这两个额外的方法用于协调线程生命周期管理事宜。之后在实际业务逻辑里反复轮询当前状态下是否有必要持续执行下去的动作直至接获到适当指示为止才正式退场!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值