《Python asyncio并发编程》[英]马修·福勒【扫描版_PDF电子书_推荐】
![《Python asyncio并发编程》[英]马修·福勒【扫描版_PDF电子书_推荐】 《Python asyncio并发编程》封面图片](https://nayona.cn/wp-content/themes/justnews/themer/assets/images/lazy.png)
| 书名:Python asyncio并发编程 作者:[英]马修·福勒(MatthewFowler) 出版社:清华大学出版社 译者:殷海英 出版日期:2023-1 页数:/ ISBN:9787302622833 | 0.0 豆瓣评分 | 孔网购买 | 点击喜欢 | 全网资源sm.nayona.cn |
内容简介:
标准Python程序很容易过载,从而出现慢如龟爬的情况。asyncio库正是为了解决这些问题而构建的,它简化了任务的划分和调度。asyncio可无缝地同时处理多个操作,使应用程序疾如闪电,且具有扩展性。
《Python asyncio并发编程》在大量示例的引导下,介绍异步、并行和并发编程。将难理解的并发内容分解为简明易懂的流程图,使读者可轻松了解任务的运行方式。在本书中,读者将学习如何使用asyncio来突破Python的限制,从而加快Web服务器和微服务的运行速度。读者甚至可将asyncio与传统的多处理技术结合起来,以大幅提升性能。
主要内容
● 通过aiohttp构建支持并发Web请求的Web API
● 同时运行海量SQL查询
● 创建一个可并行处理数GB数据的map-reduce作业
● 在asyncio中使用线程来混合阻塞代码和asyncio代码
作者简介:
Matthew Fowler拥有近20年的软件工程经验,曾任软件架构师、工程总监等多个职位。他起初为科学应用程序编写软件,然后转向全栈Web开发和分布式系统,终领导多个开发人员和管理人员团队为拥有数千万用户的电子商务网站编写应用程序及构建系统。他与妻子Kathy住在马萨诸塞州的列克星敦。
目 录:
第1 章 asyncio简介 1
1.1 什么是asyncio 2
1.2 什么是I/O密集型和CPU密集型 3
1.3 了解并发、并行和多任务处理 4
1.3.1 并发 4
1.3.2 并行 5
1.3.3 并行与并发的区别 6
1.3.4 什么是多任务 6
1.3.5 协同多任务处理的优势 7
1.4 了解进程、线程、多线程和多处理 7
1.4.1 进程 7
1.4.2 线程 8
1.5 理解全局解释器锁 11
1.5.1 GIL会释放吗 15
1.5.2 asyncio和GIL 17
1.6 单线程并发 17
1.7 事件循环的工作原理 20
1.8 本章小结 22
第2 章 asyncio基础 23
2.1 关于协程 23
2.1.1 使用async关键字创建协程 24
2.1.2 使用await关键字暂停执行 26
2.2 使用sleep引入长时间运行的协程 27
2.3 通过任务实现并行 30
2.3.1 创建任务 30
2.3.2 同时运行多个任务 31
2.4 取消任务和设置超时 34
2.4.1 取消任务 34
2.4.2 设置超时并使用wait_for
执行取消 36
2.5 任务、协程、future和awaitable 38
2.5.1 关于future 38
2.5.2 future、任务和协程之间的关系 40
2.6 使用装饰器测量协程执行时间 41
2.7 协程和任务的陷阱 43
2.7.1 运行CPU密集型代码 44
2.7.2 运行阻塞API 46
2.8 手动创建和访问事件循环 47
2.8.1 手动创建事件循环 47
2.8.2 访问事件循环 48
2.9 使用调试模式 49
2.9.1 使用asyncio.run 49
2.9.2 使用命令行参数 49
2.9.3 使用环境变量 50
2.10 本章小结 51
第3 章 个asyncio应用程序 53
3.1 使用阻塞套接字 54
3.2 使用telnet连接到服务器 56
3.2.1 从套接字读取和写入数据 57
3.2.2 允许多个连接和阻塞的危险性 59
3.3 使用非阻塞套接字 61
3.4 使用选择器模块构建套接字事件循环 65
3.5 使用asyncio事件循环的
回显服务器 68
3.5.1 套接字的事件循环协程 69
3.5.2 设计一个异步回显服务器 69
3.5.3 解决任务中的错误 72
3.6 正常关闭 74
3.6.1 监听信号 74
3.6.2 等待挂起的任务完成 76
3.7 本章小结 79
第4 章 并发网络请求 81
4.1 aiohttp 82
4.2 异步上下文管理器 82
4.2.1 使用aiohttp发出Web请求 85
4.2.2 使用aiohttp设置超时 87
4.3 并发运行任务及重新访问 88
4.4 通过gather执行并发请求 91
4.5 在请求完成时立即处理 95
4.6 使用wait进行细粒度控制 99
4.6.1 等待所有任务完成 99
4.6.2 观察异常 102
4.6.3 当任务完成时处理结果 104
4.6.4 处理超时 107
4.6.5 为什么要将所有内容都包装在一个任务中 109
4.7 本章小结 110
第5 章 非阻塞数据库驱动程序 111
5.1 关于asyncpg 111
5.2 连接Postgres数据库 112
5.3 定义数据库模式 113
5.4 使用asyncpg执行查询 116
5.5 通过连接池实现并发查询 119
5.5.1 将随机sku插入products数据库 119
5.5.2 创建连接池从而同时运行查询 123
5.6 使用asyncpg管理事务 128
5.6.1 嵌套事务 130
5.6.2 手动管理事务 132
5.7 异步生成器和流式结果集 133
5.7.1 异步生成器介绍 134
5.7.2 使用带有流游标的异步生成器 135
5.8 本章小结 139
第6 章 处理CPU密集型工作 141
6.1 介绍multiprocessing库 142
6.2 使用进程池 144
6.3 进程池执行器与asyncio 146
6.3.1 进程池执行器 146
6.3.2 带有异步事件循环的进程池执行器 148
6.4 使用asyncio解决MapReduce的问题 149
6.4.1 简单的MapReduce示例 151
6.4.2 Google Books Ngram数据集 153
6.4.3 使用asyncio进行映射和归约 154
6.5 共享数据和锁 159
6.5.1 共享数据和竞争条件 160
6.5.2 使用锁进行同步 163
6.5.3 与进程池共享数据 166
6.6 多进程,多事件循环 170
6.7 本章小结 173
第7 章 通过线程处理阻塞任务 175
7.1 threading模块 176
7.2 通过asyncio使用线程 180
7.2.1 request库 180
7.2.2 线程池执行器 181
7.2.3 使用asyncio的线程池执行器 183
7.2.4 默认执行器 184
7.3 锁、共享数据和死锁 186
7.3.1 可重入锁 188
7.3.2 死锁 190
7.4 单线程中的事件循环 192
7.4.1 Tkinter 193
7.4.2 使用asyncio和线程构建响应式UI 195
7.5 使用线程执行CPU密集型工作 203
7.5.1 多线程与hashlib 203
7.5.2 多线程与NumPy 206
7.6 本章小结 208
第8 章 流 211
8.1 流 212
8.2 传输和协议 212
8.3 流读取与流写入 216
8.4 非阻塞命令行输入 219
8.5 创建服务器 230
8.6 创建聊天服务器和客户端 232
8.7 本章小结 239
第9 章 Web应用程序 241
9.1 使用aiohttp创建REST API 242
9.1.1 什么是REST 242
9.1.2 aiohttp服务器基础知识 243
9.1.3 连接到数据库并返回结果 244
9.1.4 比较aiohttp和Flask 251
9.2 异步服务器网关接口 253
9.3 ASGI 与 Starlette 255
9.3.1 使用Starlette的REST端点 255
9.3.2 WebSocket与Starlette 257
9.4 Django异步视图 261
9.4.1 在异步视图中运行阻塞工作 267
9.4.2 在同步视图中使用异步代码 268
9.5 本章小结 269
第10 章 微服务 271
10.1 什么是微服务 272
10.1.1 代码的复杂性 272
10.1.2 可扩展性 272
10.1.3 团队和堆栈独立性 273
10.1.4 asyncio如何提供帮助 273
10.2 backend-for-frontend模式 273
10.3 实施产品列表API 275
10.3.1 “用户收藏”服务 275
10.3.2 实现基础服务 276
10.3.3 实现backend-for-frontend服务 281
10.3.4 重试失败的请求 287
10.3.5 断路器模式 290
10.4 本章小结 296
第11 章 同步 297
11.1 了解单线程并发错误 298
11.2 锁 302
11.3 使用信号量限制并发性 306
11.4 使用事件来通知任务 312
11.5 条件 317
11.6 本章小结 322
第12 章 异步队列 323
12.1 异步队列基本知识 324
12.1.1 Web应用程序中的队列 331
12.1.2 网络爬虫队列 334
12.2 优先级队列 337
12.3 LIFO队列 345
12.4 本章小结 347
第13章 管理子进程 349
13.1 创建子进程 349
13.1.1 控制标准输出 352
13.1.2 同时运行子进程 355
13.2 与子进程进行通信 359
13.3 本章小结 363
第14章 高级asyncio 365
14.1 带有协程和函数的API 366
14.2 上下文变量 368
14.3 强制事件循环迭代 370
14.4 使用不同的事件循环实现 371
14.5 创建自定义事件循环 373
14.5.1 协程和生成器 373
14.5.2 不建议使用基于生成器的协程 374
14.5.3 自定义可等待对象 376
14.5.4 使用带有future的套接字 379
14.5.5 任务的实现 381
14.5.6 实现事件循环 383
14.5.7 使用自定义事件循环实现服务器 386
14.6 本章小结 388
浏览器不支持脚本!
摘要:本书《Python asyncio并发编程》由马修·福勒撰写,是对Python异步编程的系统性指南,涵盖了asyncio框架的核心机制、应用场景以及实战技巧。全书以深入浅出的方式解释了异步I/O、事件循环、协程与任务的管理方法,并结合丰富的代码示例帮助读者快速掌握高效并发编程的方法。通过阅读本书,开发者不仅可以理解异步编程的原理,还能在实际项目中应用asyncio提升程序性能与响应能力,同时避免常见的陷阱和错误。书中内容全面、结构清晰,适合有一定Python基础的程序员深入学习和实践,使读者能够从基础概念到高级应用形成完整的知识体系,成为掌握Python并发编程的利器。
1、asyncio核心机制解析
asyncio是Python中实现异步编程的核心框架,本书首先对其基础机制进行了详细讲解。事件循环是asyncio的核心,它负责调度和执行协程任务,使程序能够在单线程中高效处理多任务。马修·福勒通过生动的示例展示了事件循环如何管理I/O操作,并解释了不同类型的事件源如何被注册和触发。
书中对协程的概念进行了深入阐述,指出协程是轻量级的函数,能够在执行过程中挂起并在适当时机恢复,从而实现非阻塞式并发。作者对await和async关键字的使用进行了详细说明,并通过示例演示了如何在协程之间传递结果以及如何处理异常,使读者对协程调度机制有直观理解。
此外,本书还对任务和未来对象进行了系统讲解。任务是对协程的封装,可以被事件循环管理,而未来对象表示异步操作的最终结果。马修·福勒通过实际案例展示了任务与未来对象的协作方式,以及如何通过回调函数实现复杂的异步控制流程,使读者能够更灵活地设计并发逻辑。
2、异步I/O与应用实践
在异步I/O部分,本书重点介绍了如何使用asyncio实现高性能网络和文件操作。作者分析了传统同步I/O的局限性,指出在高并发场景下,阻塞操作会显著影响程序性能。通过对比实验和代码演示,读者能够直观感受到异步I/O在效率提升方面的优势。
书中提供了丰富的网络编程示例,包括异步TCP、UDP服务器与客户端实现。马修·福勒不仅演示了基本的连接与数据传输,还讲解了如何处理连接异常和超时,提高程序的健壮性和可靠性。这些实践案例帮助读者快速掌握异步网络编程的核心技巧。
此外,作者还探讨了异步文件操作的应用场景和方法,包括如何利用线程池结合asyncio实现非阻塞文件读写。通过详细示例,读者可以在实际项目中灵活应用异步I/O技术,提高数据处理和响应效率,为构建高性能应用打下坚实基础。
3、协程调度与任务管理
在协程调度与任务管理部分,书中详细介绍了任务的创建、执行和取消机制。马修·福勒强调了任务管理在异步系统中的重要性,并通过实例展示了如何合理安排任务执行顺序,避免资源冲突和死锁问题。
书中对并发模式进行了分类说明,包括串行、并行、限速并发等不同策略,并讲解了如何结合asyncio实现这些模式。通过示例,读者可以理解不同策略对性能和资源消耗的影响,从而根据实际需求选择合适的调度方法。
此外,作者还深入探讨了异常处理与任务取消的实践技巧。书中提供了多种处理任务异常的方法,并解释了在协程被取消时应注意的资源释放和状态管理问题。这些内容帮助读者在实际开发中避免常见错误,提高异步程序的稳定性和可维护性。
4、实战案例与高级应用
在实战案例部分,马修·福勒结合真实项目场景展示了asyncio的高级应用。例如,构建高并发爬虫、异步Web服务器和实时数据处理系统。通过逐步讲解,读者可以清晰了解如何将asyncio技术应用到复杂项目中。
书中还介绍了与第三方库结合的实践方法,如aiohttp和aiomysql等异步库的使用。通过这些示例,读者能够掌握在实际开发中集成asyncio的策略,提升应用性能和可扩展性。
此外,作者强调了性能优化与调试技巧,包括事件循环监控、任务分析和内存管理等内容。通过实战演示,读者可以学会如何发现瓶颈、优化并发性能,从而开发出高效、稳定的异步应用程序。
总结:
《Python asyncio并发编程》以系统、深入的方式解析了Python异步编程的核心概念和技术实现,从事件循环、协程机制到任务管理与异步I/O,内容完整且层次分明。通过大量示例和实战指导,读者能够在理解原理的基础上掌握具体应用方法,逐步建立起完整的异步编程知识体系。
本书不仅适合有一定Python基础的程序员,也对希望提升程序性能和响应能力的开发者具有极高的参考价值。无论是理论学习还是实际项目开发,读者都能通过本书获得实用的技巧和经验,快速提升异步编程能力,实现高效、可靠的并发应用开发。
本文由nayona.cn整理
联系我们

关注公众号

微信扫一扫
支付宝扫一扫 