解决python ThreadPoolExecutor 线程池中的异常捕获问题
最近写了涉及线程池及线程的 python 脚本,运行过程中发现一个有趣的现象,线程池中的工作线程出现问题,引发了异常,但是主线程没有捕获异常,还在发现 BUG 之前一度以为线程池代码正常返回。但是工作线程由于异常推出了,想重新启动生产工作。显然,这个代码会报错。查阅资料,要获取线程池的异常信息,需要调用 concurrent.futures.Future.exception 方法,为了记录日志,这里加了线程池执行结束的回调函数。一种可行的实现方式就是,用线程池替代。当然,这样做得注意上面提到的线程池执行体的异常捕获问题。查阅 python docs 后才对其完整用法有所认识,所以,以后学习新的 python 包的时候还是可以查一查官方文档的。如果期程已经完成或已取消,fn 会被立即调用。
用户评论