给协程加超时:timeout 的三种用法

方式一:wait_for

try:
    data = await asyncio.wait_for(fetch(), timeout=5)
except asyncio.TimeoutError:
    data = None

方式二:timeout()

Python 3.11+ 提供上下文管理器写法,语义更清晰。

注意取消传播

超时会向协程内抛出 CancelledError,里面的 finally 仍会执行。