Python推荐用concurrent.futures.ThreadPoolExecutor管理线程池,适用于I/O密集型任务;需用with管理资源,submit返回Future,map批量提交,注意异常处理与超时控制。
Python 中推荐使用 concurrent.futures 模块管理线程池,它封装了底层 threading 的复杂逻辑,提供统一、简洁的接口。核心是 ThreadPoolExecutor 类,适合 I/O 密集型任务(如网络请求、文件读写),不适用于 CPU 密集型场景(此时应选 ProcessPoolExecutor)。
通过 with 语句自动管理资源,避免忘记调用 sh:
utdown()
max_workers 控制最大并发线程数(默认为 min(32, os.cpu_count() + 4))submit() 提交单个任务,返回 Future 对象,可调用 result() 阻塞获取结果map() 批量提交,行为类似内置 map,自动按序返回结果方式一:逐个处理 Future
适用于需要立即响应、或对每个任务做独立错误处理的场景:
executor.submit(func, *args) 得到 future
future.result(timeout=5) 获取结果,超时抛出 TimeoutError
future.exception() 检查是否发生异常(非阻塞)方式二:批量处理 map 结果
适合参数结构一致、结果顺序敏感的任务:
executor.map(func, iterables) 返回迭代器,按输入顺序产出结果next() 或遍历时抛出functools.partial 或 lambda 封装)线程中异常不会自动传播到主线程,必须显式检查:
submit 后立即调用 future.exception() 可判断是否失败(返回 None 表示无异常)result(timeout=...) 是最常用的等待+取值+捕获异常方式try/except 使用,尤其在循环提交多个任务时例如:不要忽略 timeout 参数,否则一个卡死的请求可能拖垮整个池。
线程池不是“即用即弃”的工具,合理复用能显著提升性能:
ThreadPoolExecutor 实例shutdown(wait=True) 等待所有任务完成;wait=False 则立即返回,后台继续执行