给协程加超时:timeout 的三种用法
方式一:wait_for
try:
data = await asyncio.wait_for(fetch(), timeout=5)
except asyncio.TimeoutError:
data = None
方式二:timeout()
Python 3.11+ 提供上下文管理器写法,语义更清晰。
注意取消传播
超时会向协程内抛出 CancelledError,里面的 finally 仍会执行。
try:
data = await asyncio.wait_for(fetch(), timeout=5)
except asyncio.TimeoutError:
data = None
Python 3.11+ 提供上下文管理器写法,语义更清晰。
超时会向协程内抛出 CancelledError,里面的 finally 仍会执行。