python强制结束线程_python利用ThreadPoolExecutor实现有任务异常,就终止线程池中的所有剩余任务...

本文介绍了如何在Python中使用ThreadPoolExecutor实现当线程池中有任务出现异常时,立即终止所有未开始的任务。通过创建一个消息队列,一旦任务异常,就将“Termination”消息写入队列,从而阻止新的任务执行,同时等待正在执行的任务完成。这种方式避免了在异常发生到主线程捕获异常期间仍有任务被执行的问题。
摘要由CSDN通过智能技术生成

先描述一下场景:

我有一批任务需要放入线程池中去处理,但是一旦线程池中有1个任务出现了异常(抛了Exception)就将线程中尚未开始的任务全部取消不执行。

需要说明的是正在执行的任务因为无法撤销,所以正在执行的任务只能继续执行,等他执行完成。

import queue

from concurrent.futures import ThreadPoolExecutor, as_completed, wait, ALL_COMPLETED, FIRST_EXCEPTION

def send_cmd(ip, exec_queue):

# 如果消息队列中消息不为空,说明已经有任务异常了

if not exec_queue.empty():

return

try:

# 需要执行的主任务

except Exception as e:

# 如果任务异常了就在队列中写入一个消息,用于锁住线程池

exec_queue.put("Termination")

# 此处一定要将异常再次抛出,否则主线程池无法捕获异常,会统一认定为任务已被取消

raise Exception(e)

# 此处使用消息队列作为线程池锁,避免在第一个任务异常发生后到主线程获知中间仍然有任务被发送执行

exec_queue = queue.Queue()

with ThreadPoolExecutor(max_workers=thread_pool_size) as executor:

task_dict, task_list = {}, []

# 将任务全部放入线程池中

for ip in ip_list:

task = executor.submit(send_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值