Python 异步编程与协程实战指南
在 I/O 密集型任务中,同步阻塞往往导致资源闲置。异步编程通过非阻塞机制,让程序在等待网络或文件操作时能继续处理其他逻辑,从而显著提升并发效率。
什么是异步编程
异步编程的核心在于'不等待'。当程序发起一个耗时操作(如 HTTP 请求)后,它不会挂起线程,而是注册回调或直接返回控制权给事件循环。等到结果就绪,再恢复执行。这种方式减少了线程切换开销,代码结构也更为扁平。
适用场景:
- 高并发网络通信(HTTP、WebSocket)
- 大文件读写
- 数据库查询
协程:轻量级并发单元
协程(Coroutine)是 Python 异步编程的基础。使用 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(name):
print(f'{name} Counting...')
await asyncio.sleep(1)
print(f'{name} Counted!')
async def main():
await asyncio.gather(count('A'), count('B'), count('C'))
asyncio.run(main())
任务调度与管理
除了直接运行协程,我们通常将其封装为 Task 对象,以便更灵活地控制生命周期。


