Python 异步编程与协程实战指南
在 I/O 密集型场景下,传统的同步阻塞模型往往成为性能瓶颈。Python 的异步编程通过非阻塞机制,让程序在等待网络或文件操作时能继续处理其他任务,显著提升并发效率。本文将深入解析协程、事件循环及 asyncio 核心库,并通过 aiohttp 实战演示如何构建高并发应用。
异步编程概述
为什么需要异步
同步代码在执行耗时操作(如 HTTP 请求、数据库查询)时会阻塞线程,导致资源闲置。异步编程则利用单线程的事件循环调度多个协程,在等待期间切换执行其他任务,从而降低线程切换开销,简化代码结构。
典型应用场景:
- 网络通信:HTTP 请求、WebSocket、RPC 调用。
- 文件操作:大文件的读写流处理。
- 数据库交互:异步 ORM 查询。
协程的定义与使用
协程(Coroutine)是轻量级的用户态线程,支持暂停和恢复。在 Python 中,使用 async def 定义协程函数,内部通过 await 挂起执行。
import asyncio
async def hello():
print('Hello, World!')
await asyncio.sleep(1) # 模拟 I/O 等待
print('Hello again!')
if __name__ == '__main__':
asyncio.run(hello())
注意,协程对象本身不会立即执行,必须通过事件循环运行。当需要并发执行多个协程时,可以使用 asyncio.gather 批量收集结果:
import asyncio
async def count(label):
print(f'{label} Counting...')
await asyncio.sleep(1)
print(f'{label} Counted!')
():
asyncio.gather(count(), count(), count())
asyncio.run(main())


