Python asyncio 异步编程
学习asyncio · 难度:高级 · +15XP
Python asyncio 异步编程
asyncio 是 Python 3.4 引入的标准库,用于编写单线程并发代码。它使用 async/await 语法,基于事件循环(Event Loop)实现协程的调度。异步编程特别适合 I/O 密集型任务,如网络请求、文件读写、数据库操作等。同一个线程可以在等待 I/O 的同时处理其他任务,大幅提升程序的并发性能。
协程基础
协程(Coroutine)是使用 async def 定义的函数:
import asyncio
# 定义一个协程函数
async def hello():
print('Hello')
await asyncio.sleep(1) # 模拟异步等待
print('World')
# 运行协程
asyncio.run(hello())
并发执行多个任务
import asyncio
import time
async def fetch_data(url, delay):
print(f'开始请求: {url}')
await asyncio.sleep(delay) # 模拟网络请求
print(f'完成请求: {url}')
return f'{url} 的数据'
async def main():
start = time.time()
# 并发执行多个任务
results = await asyncio.gather(
fetch_data('api/users', 2),
fetch_data('api/products', 1),
fetch_data('api/orders', 1.5),
)
elapsed = time.time() - start
print(f'结果: {results}')
print(f'总耗时: {elapsed:.2f}秒') # 约2秒,而非4.5秒
asyncio.run(main())
创建任务
import asyncio
async def worker(name, delay):
await asyncio.sleep(delay)
print(f'{name} 完成工作')
return f'{name} 结果'
async def main():
# 创建 Task 对象
task1 = asyncio.create_task(worker('A', 2))
task2 = asyncio.create_task(worker('B', 1))
# Task 可以独立运行,稍后获取结果
result1 = await task1
result2 = await task2
print(result1, result2)
asyncio.run(main())
asyncio 关键概念速查
| 概念/函数 | 说明 |
|---|---|
| async def | 定义协程函数 |
| await | 等待协程执行完成 |
| asyncio.run() | 运行顶层协程(Python 3.7+) |
| asyncio.gather() | 并发执行多个协程 |
| asyncio.create_task() | 将协程包装为 Task 对象 |
| asyncio.sleep() | 异步等待(不阻塞线程) |