详解python ThreadPoolExecutor异常捕获

目录
  • 解决方法1:
  • 解决方法2:

python ThreadPoolExecutor线程池的工作线程中出现异常时,主线程不会捕获异常。

解决方法1:

直接在需要执行的任务方法中添加try:

executor = ThreadPoolExecutor()
executor.submit(test_work, 0)

def test_work(p):
    try:
        1/p
    except Exception as e:
        logger.exception(e)

解决方法2:

添加完成运行时的callback:

executor = ThreadPoolExecutor()
task = executor.submit(test_work, 0)
task.add_done_callback(handle_exception)

handle_exception中又可以通过两种方式捕获异常:

2.1 通过concurrent.futures.Future.exception(timeout=None)

def handle_exception(worker):
    # Method 1: concurrent.futures.Future.exception(timeout=None)
    worker_exception = worker.exception()
    if worker_exception:
        logger.exception(worker_exception)

2.2 通过concurrent.futures.Future.result(Timeout = None)

def handle_exception(worker):
    Method 2: try
    try:
        worker.result()
    except Exception as e:
        logger.exception(e)

到此这篇关于详解python ThreadPoolExecutor异常捕获的文章就介绍到这了,更多相关python ThreadPoolExecutor异常捕获内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python上下文管理器使用场景及异常处理

    目录 引言 1.先看看最简单的例子,with语句 2.什么是上下文管理器? 3.上下文管理器的原理过程如下: 4.上下文管理器的应用场景: 4.1 数据库连接 4.2上下文管理器的异常处理 引言 使用上下文管理器,可以让代码更加优雅简洁.当然,上下文的管理器的作用不止于此,它内部的实现机制,能很好的处理代码异常,提升代码的复用性 1.先看看最简单的例子,with语句 # 创建一个文件写入字符串"Python" f = open('123.txt', 'w') f.write("

  • Python中try excpet BaseException(异常处理捕获)的使用

    try ...except 是最常见的捕获处理异常的结构,其主要作用是将可能出现问题的代码块用try :包裹起来,不至于出现错误让程序崩溃,无法执行下去 常见的try ...excpet 的结构有三种 try: pass except BaseException as e : 异常处理模块 try 中包含着可能发生异常的程序代码,except 块中包含着,发生异常后,用来捕获异常和处理异常代码 如果在try包含的模块中发生了异常则会跳转到 except的模块中,去执行 except中的代码,ex

  • 详解python的异常捕获

    目录 ①捕捉一个异常 ②捕捉多个异常 ③Exception捕捉所有异常 ④raise主动触发异常 ⑤try…except…else…finally逻辑 总结 ①捕捉一个异常 捕捉一个异常 以用0作为除数会得到ZeroDivisionError异常为例, print(1/0) 为例程序的持续执行,不因该异常而中止, 遂对该异常进行处理,使异常时输出该异常内容: try: print(1/0) except ZeroDivisionError as e: print(e) ②捕捉多个异常 捕捉指定的

  • 详解python中的异常捕获

    异常 异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随之终止. # 异常处理的三个特征 - 异常的追踪信息 - 异常的类型 - 异常的内容 捕获异常的目的:为了增强程序的健壮性,即便程序运行过程中出错,也不要终止程序,而是捕获异常并处理,将出错信息记录到日志内. # 语法上错误SyntaxError - 处理方式1:必须在程序运行前就改正 # 逻辑上的错误 - 错误发生的条件是可以预知的 --> if判断 - 错误发生的条件是无法预知的 --> 异常捕获 try 本来程序一旦出

  • 详解python中的异常和文件读写

    Python异常 1.python异常的完整语法 try: # 提示用户输入一个整数 num = int(input("输入一个整数:")) # 使用 8 除以用户输入的整数并且输出 result = 8 / num print(result) except ValueError: print("请输入正确的整数!") except Exception as result: print("未知错误:%s" % result) else: prin

  • 详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别

    详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别 os._exit() 和 sys.exit() os._exit() vs sys.exit() 概述 Python的程序有两中退出方式:os._exit(), sys.exit().本文介绍这两种方式的区别和选择. os._exit()会直接将python程序终止,之后的所有代码都不会继续执行. sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那

  • 详解Python中string模块除去Str还剩下什么

    string模块可以追溯到早期版本的Python. 以前在本模块中实现的许多功能已经转移到str物品. 这个string模块保留了几个有用的常量和类来处理str物品. 字符串-文本常量和模板 目的:包含用于处理文本的常量和类. 功能 功能capwords()将字符串中的所有单词大写. 字符串capwords.py import string s = 'The quick brown fox jumped over the lazy dog.' print(s) print(string.capw

  • 详解python定时简单爬取网页新闻存入数据库并发送邮件

    本人小白一枚,简单记录下学校作业项目,代码十分简单,主要是对各个库的理解,希望能给别的初学者一点启发. 一.项目要求 1.程序可以从北京工业大学首页上爬取新闻内容:http://www.bjut.edu.cn 2.程序可以将爬取下来的数据写入本地MySQL数据库中. 3.程序可以将爬取下来的数据发送到邮箱. 4.程序可以定时执行. 二.项目分析 1.爬虫部分利用requests库爬取html文本,再利用bs4中的BeaultifulSoup库来解析html文本,提取需要的内容. 2.使用pymy

  • 详解python网络进程

    目录 一.多任务编程 二.进程 三.os.fork创建进程 3.1.进程ID和退出函数 四.孤儿和僵尸 4.1.孤儿进程 4.2.僵尸进程 4.3.如何避免僵尸进程的产生 五.Multiprocessing创建进程 5.1.multiprocessing进程属性 六.进程池 七.进程间通信(IPC) 7.1.管道通信(Pipe) 7.2.消息队列 7.3.共享内存 7.4.信号量(信号灯集) 一.多任务编程 意义:充分利用计算机的资源提高程序的运行效率 定义:通过应用程序利用计算机多个核心,达到

  • 详解Python使用apscheduler定时执行任务

    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信上,翻了翻 fastapi 中的实现,虽然方法和包也不少,但是要不就是太重了(比如需要再开服务,还要依赖 redis,都不好用),虽然也可以使用 time 模块的 time.sleep()机上 fastapi 的后台任务变相实现,但是相对简单的功能还行,复杂点的代码起来就麻烦了,所以还是专人专事找个负责这个额的包吧.找来找去发现

  • 详解Python如何实现尾递归优化

    目录 一般递归与尾递归 一般递归 尾递归 C中尾递归的优化 Python开启尾递归优化 一般递归与尾递归 一般递归 def normal_recursion(n): if n == 1: return 1 else: return n + normal_recursion(n-1) 执行: normal_recursion(5)5 + normal_recursion(4)5 + 4 + normal_recursion(3)5 + 4 + 3 + normal_recursion(2)5 +

  • 详解Python中迭代器和生成器的原理与使用

    目录 1.可迭代对象.迭代器 1.1概念简介 1.2可迭代对象 1.3迭代器 1.4区分可迭代对象和迭代器 1.5可迭代对象和迭代器的关系 1.6可迭代对象和迭代器的工作机制 1.7自己动手创建可迭代对象和迭代器 1.8迭代器的优势 1.9迭代器的缺点和误区 1.10python自带的迭代器工具itertools 2.生成器 2.1生成器的创建方法 2.2生成器方法 2.3生成器的优势 2.4生成器应用场景 3.生成器节省内存.迭代器不节省内存 3.1可迭代对象 3.2迭代器 3.3生成器 3.

随机推荐