Python 中的协程和 async/await
Python 中 async/await 关键字的作用是什么?协程(coroutine)与生成器有什么关系?
回答
编译有声
async def 定义协程函数,await 挂起协程等待异步操作完成。
import asyncio
async def fetch_data(url):
print(f'Fetching {url}')
await asyncio.sleep(1) # 模拟 I/O
return f'Data from {url}'
async def main():
tasks = [fetch_data(f'url{i}') for i in range(3)]
results = await asyncio.gather(*tasks)
return results
results = asyncio.run(main())
与生成器的关系:
- 协程基于生成器(
yield from)发展而来 - Python 3.5 引入
async/await语法 - 协程是使用 await 的生成器进化版
- 事件循环调度协程执行(asyncio)
协程适合 I/O 密集型任务,利用等待时间切换执行。