0

0

Python线程池教程_concurrentfutures详解

舞夢輝影

舞夢輝影

发布时间:2026-01-05 21:16:03

|

689人浏览过

|

来源于php中文网

原创

python concurrent.futures.threadpoolexecutor 用于高效处理 i/o 密集型任务,支持 submit() 提交异步任务、map() 批量调用、as_completed() 按完成顺序获取结果,需合理设置 max_workers、用 with 管理生命周期,并通过 result() 或 exception() 处理异常。

python线程池教程_concurrentfutures详解

Python 中 concurrent.futures标准库中用于简化并发编程的模块,它封装了线程(ThreadPoolExecutor)和进程(ProcessPoolExecutor)的执行逻辑,让你不用手动管理线程/进程的创建、调度与回收。对 I/O 密集型任务(如网络请求、文件读写),用线程池最常用也最有效。

ThreadPoolExecutor 基本用法

创建线程池后,通过 submit() 提交单个任务,或用 map() 批量提交相同函数的不同参数。任务返回 Future 对象,可用来检查状态、获取结果或处理异常。

  • submit():适合异步提交不同函数或带不同参数的任务,返回单个 Future
  • map():适合对一组输入统一调用同一个函数,返回迭代器,自动按提交顺序产出结果(不是完成顺序)
  • as_completed():若想按任务完成先后顺序处理结果,需配合 concurrent.futures.as_completed() 使用

控制线程数量与生命周期

线程池大小默认是 min(32, os.cpu_count() + 4),但对 I/O 任务,通常设为 10–50 更合理;太多线程反而因上下文切换开销降低性能。务必用 with 语句或显式调用 shutdown() 来释放资源。

  • 初始化时传入 max_workers=10 可限制最大并发线程数
  • shutdown(wait=True)(默认)会等待所有已提交任务完成才退出
  • shutdown(wait=False) 立即返回,后台继续运行未完成任务(不推荐,易丢失结果)

异常处理与结果获取

线程中抛出的异常不会直接冒泡到主线程,而是被封装进 Future 对象。必须显式调用 future.result() 才会触发异常重抛;用 future.exception() 可静默检查是否出错。

Python v2.4 中文手册 chm
Python v2.4 中文手册 chm

Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。

下载

立即学习Python免费学习笔记(深入)”;

  • 调用 result() 会阻塞,直到任务完成;可加 timeout 参数避免无限等待
  • 批量处理时,建议用 try/except 包裹 result(),单独处理每个任务的失败
  • 不要在循环中频繁调用 result() 而不 await 或 as_completed —— 这会退化成串行执行

实用小技巧与避坑提醒

线程池不是万能的。CPU 密集型任务建议用 ProcessPoolExecutor;共享变量需注意线程安全;全局解释器锁(GIL)让多线程无法真正并行计算,但不影响 I/O 并发。

  • 避免在 submit() 中传入 lambda 或嵌套函数(序列化问题),优先用普通函数名
  • 不要在线程中修改模块级变量或全局状态,除非加锁(threading.Lock
  • 长时间运行的任务应主动响应中断(比如定期检查 threading.current_thread().ident 是否有效,或使用 concurrent.futures.wait() 配合 timeout 控制)

掌握好 ThreadPoolExecutor 的提交方式、生命周期管理和错误处理,就能写出简洁又健壮的并发代码。不复杂但容易忽略细节。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

214

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

192

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

60

2026.01.05

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

743

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

375

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

27

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

102

2026.02.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号