前言
许多应用程序,尤其在当今的Web应用程序领域,严重依赖I/O操作。这些类型的操作包括从Internet下载网页的内容、通过网络与一组微服务进行通信,或者针对MySQL或Postgres等数据库同时运行多个查询。Web请求或与微服务的通信可能需要数百毫秒,如果网络很慢,甚至可能需要几秒钟。数据库查询可能耗费大量时间,尤其是在该数据库处于高负载或查询很复杂的情况下。Web服务器可能需要同时处理数百或数千个请求。
一次发出许多这样的I/O请求会导致严重的性能问题。如果像在顺序运行的应用程序中那样一个接一个地执行这些请求,将看到复合的性能影响。例如,如果正在编写一个需要下载100个网页或执行100个查询的应用程序,每个查询需要1秒的执行时间,那么应用程序将至少需要100秒才能运行完成。此问题的一种解决方案是引入并发性,同时启动下载和等待,理论上可在短短秒内完成这些操作。简单来说,并发意味着允许同时处理多个任务。在并发I/O的情况下,允许同时发出多个Web请求或允许多个客户端同时连接到服务器。
关于asyncio
Python生态系统的最新成员之一是asyncio库。asyncio是异步I/O的缩写。它是一个Python库,允许使用异步编程模型运行代码。这让我们可以一次处理多个I/O操作,同时仍然允许应用程序保持对外界的响应。异步编程意味着一个特定的长时间运行的任务可以在后台运行,与主应用程序分开。系统可以自由地执行不依赖于该任务的其他工作,而不是阻止其他所有应用程序代码等待该长时间运行的任务完成。一旦长时间运行的任务完成,会收到它已经完成的通知,以便对结果进行处理。
在Python3.4中,asyncio首先引入了装饰器和生成器通过yieldfrom来定义协程。协程是一种方法,当有一个可能长时间运行的任务时,它可以暂停,然后在任务完成时恢复。在Python3.5中,当关键字async和await被显式添加到语言中时,该语言实现了对协程和异步编程的顶级支持。这种语法在C#和JavaScript等其他编程语言中很常见,使异步代码看起来像是同步运行的。这样异步代码易于阅读和理解,因为它看起来像大多数软件工程师熟悉的顺序流。
asyncio是一个库,使用称为单线程事件循环的并发模型以异步方式执行这些协程。虽然asyncio的名字可能会让我们认为这个库只适用于I/O操作,但它也可通过与多线程和多处理进行互操作来处理其他类型的操作。通过这种互操作性,可使用线程和进程的async与await语法,使这些工作流更容易理解。这意味着这个库不仅适用于基于的并发性,还可以用于密集型代码。
《Python asyncio并发编程》
《Pythonasyncio并发编程》旨在介绍如何在Python中利用并行技术提高应用程序的性能、吞吐量和响应能力。本书首先关注并行的核心主题,解释asyncio的单线程并发模型是如何工作的,以及协程和async/await语法的工作原理。然后介绍并发的实际应用,例如并行发出多个Web请求或数据库查询、管理线程和进程、构建Web应用程序,以及处理同步问题。
本书作者MatthewFowler拥有近20年的软件工程经验,曾任软件架构师、工程总监等多个职位。他起初为科学应用程序编写软件,然后转向全栈Web开发和分布式系统,最终领导多个开发人员和管理人员团队为拥有数千万用户的电子商务网站编写应用程序及构建系统。
标准Python程序很容易过载,从而出现慢如龟爬的情况。asyncio库正是为了解决这些问题而构建的,它简化了任务的划分和调度。asyncio可无缝地同时处理多个操作,使应用程序疾如闪电,且具有扩展性。《Python asyncio并发编程》在大量示例的引导下,介绍异步、并行和并发编程。将难理解的并发内容分解为简明易懂的流程图,使读者可轻松了解任务的运行方式。在本书中,读者将学习如何使用asyncio来突破Python的限制,从而加快Web服务器和微服务的运行速度。读者甚至可将asyncio与传统的多处理技术结合起来,以大幅提升性能。
本书主要内容
● 通过aiohttp构建支持并发Web请求的Web API
● 同时运行海量SQL查询
● 创建一个可并行处理数GB数据的map-reduce作业
● 在asyncio中使用线程来混合阻塞代码和asyncio代码
书目详情
京东购买链接