当前位置: 首页 > news >正文

线程中的异常处理

线程中的异常处理

concurrent.futures — 启动并行任务 — Python 3.13.0 文档

from concurrent.futures import ThreadPoolExecutordef task():a = 1 / 0print('任务执行中...')with ThreadPoolExecutor(max_workers=5) as t:for i in range(10):worker = t.submit(task)

没有任任何打印, 有任务中的异常被吃掉了

打印线程中异常信息堆栈

from concurrent.futures import ThreadPoolExecutordef task():a = 1 / 0print('任务执行中...')def callback(future):print('任务执行完毕')# 打印异常信息print(future.exception())  # division by zero# 打印异常信息堆栈future.result()with ThreadPoolExecutor(max_workers=5) as t:for i in range(10):future = t.submit(task)future.add_done_callback(callback)

image-20241008143218511

处理线程中执行的异常

from concurrent.futures import ThreadPoolExecutordef task():a = 1 / 0print('任务执行中...')def callback(future):print('任务执行完毕')try:future.result()except Exception as e:print("处理线程中执行的异常", e)passwith ThreadPoolExecutor(max_workers=5) as t:for i in range(10):future = t.submit(task)future.add_done_callback(callback)

根据线程任务返回结果判断是否继续新增线程

from concurrent.futures import ThreadPoolExecutordef task(pages):for page in pages:print('任务', page)# 假设 第33页是最后一页if page >= 33:return Truedef main():with ThreadPoolExecutor(max_workers=10) as t:# 根据任务返回结果判断是否继续新增线程# 场景: 有个未知总页数的任务, 每次线程任务执行10页, 当任务返回结果为True时, 任务结束over = Falsepage = 0jump = 10def callback(future):nonlocal overres = future.result()print('任务返回结果', res)if res:print("任务结束")over = Truewhile not over:pages = list(range(page, page + jump))f = t.submit(task, pages)f.add_done_callback(callback)page += jumpif __name__ == '__main__':main()

多个参数的任务

from concurrent.futures import ThreadPoolExecutordef task(a, b):print(a, b)def main():with ThreadPoolExecutor(max_workers=10) as t:for i in range(10):t.submit(task, i, i * i)if __name__ == '__main__':main()

(max_workers=10) as t:
for i in range(10):
t.submit(task, i, i * i)

if name == ‘main’:
main()



http://www.mrgr.cn/news/45527.html

相关文章:

  • express,接口 token 验证
  • 力扣之603.连续空余座位
  • java高并发的使用
  • 【NLP】GRU基本结构原理,代码实现
  • Flutter + Three.js (WebView)实现桌面端3d模型展示和交互
  • 【Vue】Vue2(2)
  • 【LeetCode刷题】:双指针篇(移动零、复写零)
  • SEO(搜索引擎优化)指南
  • 红队老子养成记2 - 不想渗透pc?我们来远控安卓!(全网最详细)
  • 要实现无限极评论
  • 计算机毕业设计-自主完成指南
  • MySql复习知识及扩展内容
  • C语言从头学65—学习头文件 <stdio.h>(一)
  • 碧桂园服务携手安徽砀山,以购代捐助力乡村振兴
  • scaling 的作用
  • Python Kivy 完整应用开发:待办事项列表
  • 【RTCP】Interarrival Jitter: 到达间隔抖动的举例说明
  • 【Transformer 模型中的投影层,lora_projection是否需要?】
  • 点餐小程序实战教程17角色管理
  • OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【内存调测】