Python 异步编程与协程实战指南
在 I/O 密集型任务中,传统的同步阻塞往往成为性能瓶颈。Python 的异步编程模型通过事件循环和协程机制,让程序在等待网络或磁盘响应时能继续处理其他请求,显著提升吞吐量。本文将深入探讨 asyncio 核心概念,并结合 aiohttp 库完成高并发 HTTP 客户端与服务器的实战构建。
核心概念:协程与事件循环
什么是协程
协程(Coroutine)是轻量级的用户态线程,允许函数在执行过程中暂停并恢复状态。在 Python 中,使用 async def 定义协程函数,内部通过 await 挂起执行点。
import asyncio
# 定义一个协程
async def hello():
print('Hello, World!')
await asyncio.sleep(1) # 模拟耗时操作,不阻塞主线程
print('Hello again!')
# 运行协程
asyncio.run(hello())
任务调度与并发
多个协程可以通过 asyncio.gather() 并发执行。事件循环负责管理这些任务的排队、唤醒和调度。
import asyncio
async def count():
print('Counting...')
await asyncio.sleep(1)
print('Counted!')
async def main():
# 并发执行三个计数任务
await asyncio.gather(count(), count(), count())
asyncio.run(main())
任务控制:取消与超时
在实际开发中,我们需要灵活控制任务生命周期。例如设置超时防止请求卡死,或在不需要时主动取消任务。
asyncio
():
:
asyncio.wait_for(hello(), timeout=)
asyncio.TimeoutError:
()
():
task = asyncio.create_task(hello())
asyncio.sleep()
task.cancel()
:
task
asyncio.CancelledError:
()


