线程中止/中断

线程中止三种方法

  1. 当run() 方法完成后线程中止
  2. 使用stop() 方法强制终止线程,该方法已经被弃用。会引发一系列问题
  3. 使用interrupt方法中断线程,使用标记让run()结束。
    参考博客

线程的中断/阻塞线程和使用中断

  1. sleep(), 这种中断属于阻塞线程,线程任然可以获取cpu的执行权
  2. synchronized, 同步锁中断,
  3. wait()方法,这种中孤单属于挂起状态,一般写在synchronized同步代码块内,
  4. join(): 等待调用此方法的线程执行完毕之后,再来执行当前线程。
    参考博客
### 如何在Python中实现多线程中断 在Python中,由于全局解释器锁(GIL)的存在,原生的多线程并不像Java那样高效处理并发任务。然而,在某些情况下仍然可以利用`threading`模块来创建和管理线程,并通过特定机制实现线程中断。 对于线程中断的需求,通常的做法不是直接终止线程——因为强制停止可能会留下资源未释放等问题——而是采用优雅的方式让目标线程自行退出循环或执行流。一种常见方法是在共享变量上设置标志位,该标志用于通知工作线程何时应该结束其活动[^1]。 下面是一个简单的例子展示如何安全地中止正在运行的工作线程: ```python import threading import time class StoppableThread(threading.Thread): """继承自 Thread 类并添加 stop_flag 属性""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.stop_flag = False def run(self): while not self.stop_flag: try: # 执行具体业务逻辑... print('Working...') time.sleep(1) # 模拟耗时操作 except Exception as e: print(f'Error occurred: {e}') def graceful_stop(self): """设定 stop_flag=True 来请求线程停止""" self.stop_flag = True if __name__ == '__main__': worker = StoppableThread() worker.start() time.sleep(5) print("Requesting thread termination...") worker.graceful_stop() # 请求线程停止 worker.join(timeout=2) # 等待最多两秒直到线程真正结束 if worker.is_alive(): print("Failed to terminate the thread within timeout.") else: print("Thread terminated successfully.") ``` 在这个实例里定义了一个名为 `StoppableThread` 的类,它扩展了标准库中的 `threading.Thread` 。此子类引入了一个布尔类型的成员变量 `stop_flag` ,用来指示当前对象是否应当准备关闭自己。当主线程想要取消某个辅助线程的时候只需要调用对应的 `graceful_stop()` 方法即可改变这个状态标记从而触发正常退出流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值