共计 886 个字符,预计需要花费 3 分钟才能阅读完成。
随着网络编程与高并发场景的普及,传统同步阻塞模型已无法满足效率要求。Python 从 3.4 开始引入 asyncio 模块,正式支持异步编程。它基于事件循环和协程,为高并发 I/O 密集型任务提供了高效解决方案。
一、什么是异步编程
同步模型下,程序一步一步执行,等待每个操作完成。而异步编程允许程序在等待 I/O 操作完成时切换去执行其他任务,充分利用 CPU 资源,提升执行效率。
二、asyncio 的核心概念
- 协程(coroutine):用
async def定义的函数,返回协程对象。 - await:只能在协程中使用,表示等待另一个协程完成。
- 事件循环(event loop):调度协程任务的机制,是 asyncio 的心脏。
三、示例:异步延迟任务
import asyncio
async def say_hello(name):
print(f"{name}:开始 ")
await asyncio.sleep(2)
print(f"{name}:结束 ")
async def main():
await asyncio.gather(say_hello(" 任务 A "),
say_hello(" 任务 B "),
say_hello(" 任务 C ")
)
asyncio.run(main())
程序输出如下,3 个任务“同时”开始,2 秒后同时结束,体现异步并发执行的优势。
四、事件循环机制简述
asyncio.run(main()):创建并运行事件循环。asyncio.gather():并发执行多个协程任务。await表示在等待期间释放 CPU 控制权给其他任务。
五、对比:同步 vs 异步
| 模型 | 示例 | 效率 | 场景适用 |
|---|---|---|---|
| 同步 | requests.get | 简单直观 | 小任务量 |
| 异步 | aiohttp.get | 高效节能 | 高并发任务 |
六、练习建议
- 修改之前的 TCP 服务端,尝试使用 asyncio 实现并发连接处理。
- 了解
asyncio.create_task()与await的不同使用方式。 - 编写一个异步爬虫程序,体验
aiohttp的效率优势。
异步编程是现代 Python 的一项核心技能,配合 async/await 语法,可以优雅地编写高性能网络应用。明天我们将深入使用 aiohttp 实现异步 HTTP 请求处理。
正文完