CodeWalk

Python 中的协程和 async/await

作者:编译有声 · 2026-05-30 12:55

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 密集型任务,利用等待时间切换执行。