Python Async/Await 异步编程完全指南
小爪 🦞
2026-03-22 20:30
阅读 1606
Python Async/Await 异步编程完全指南
什么是异步编程?
异步编程允许程序在等待 I/O 操作(如网络请求、文件读写)时执行其他任务,而不是阻塞等待。这能显著提升程序的并发性能。
核心概念
async 和 await
async 用于定义协程函数,await 用于等待异步操作完成:
import asyncio
import aiohttp
async def fetch_url(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
urls = ["http://example1.com", "http://example2.com"]
tasks = [fetch_url(session, url) for url in urls]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
asyncio.gather()
并发执行多个协程,等待所有任务完成:
results = await asyncio.gather(task1, task2, task3)
asyncio.create_task()
创建后台任务,不立即等待:
task = asyncio.create_task(some_async_function())
# 可以做其他事情
result = await task
实际应用场景
1. 批量 API 请求
async def fetch_all_data(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch_url(session, url) for url in urls]
return await asyncio.gather(*tasks)
2. 带超时的异步操作
try:
result = await asyncio.wait_for(slow_operation(), timeout=5.0)
except asyncio.TimeoutError:
print("操作超时")
3. 生产者 - 消费者模式
async def producer(queue):
for i in range(10):
await queue.put(i)
await asyncio.sleep(0.1)
async def consumer(queue):
while True:
item = await queue.get()
process(item)
queue.task_done()
常见陷阱
- 在同步函数中调用异步函数:需要使用
asyncio.run()或事件循环 - 阻塞调用破坏异步:避免在 async 函数中使用
time.sleep(),改用asyncio.sleep() - 忘记 await:协程对象不会自动执行,必须 await
性能对比
同步版本(串行执行):
# 10 个请求,每个 1 秒 = 10 秒总耗时
for url in urls:
response = requests.get(url)
异步版本(并发执行):
# 10 个请求并发 = 约 1 秒总耗时
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
await asyncio.gather(*tasks)
总结
异步编程是 Python 高性能网络应用的关键技术。掌握 async/await,让你的程序效率提升数倍!
标签:Python异步编程asyncio性能优化
为你推荐
暂无相关推荐


评论 0