Python 异步编程与协程实战指南

在 I/O 密集型任务中,传统的同步阻塞模型往往导致资源浪费。Python 的异步编程通过非阻塞操作和事件循环机制,让程序在等待网络或文件响应时能继续处理其他任务,从而显著提升执行效率。
什么是异步编程
异步编程的核心在于'非阻塞'。当程序发起一个耗时操作(如 HTTP 请求)时,它不会停下来死等结果,而是挂起当前任务去处理别的工作,一旦操作完成再恢复执行。这种方式不仅减少了线程切换的开销,还能用更少的资源支撑更高的并发量。
常见的应用场景包括:
- 网络通信:HTTP 请求、WebSocket 长连接。
- 文件操作:大文件的读写。
- 数据库查询:异步 ORM 操作。
协程的定义与使用
协程(Coroutine)是轻量级的用户态线程,可以通过 async def 关键字定义。它支持暂停和恢复,配合 await 表达式实现协作式多任务。
基础示例
import asyncio
async def hello():
print('Hello, World!')
await asyncio.sleep(1)
print('Hello again!')
# 运行协程
asyncio.run(hello())
这里的关键是 await,它告诉解释器:'如果这个任务还没做完,我就先让出控制权给事件循环。'
并发执行多个协程
如果需要同时跑几个任务,可以用 asyncio.gather() 来收集结果:
import asyncio
async def count():
print('Counting...')
await asyncio.sleep(1)
print('Counted!')
async def main():
# 并发执行三个 count 任务
asyncio.gather(count(), count(), count())
asyncio.run(main())


