为什么不能这样做:
try:
async with asyncio.wait_for(aiohttp.get(url), 2) as resp:
print(resp.text())
except asyncio.TimeoutError as e:
pass
给出
async with asyncio.wait_for(aiohttp.get(url), 2) as resp:
AttributeError: __aexit__
根据我的理解,asyncio.wait_for()
会传递aiohttp.get()
的未来,其__aenter__
和__aexit__
方法({{1}这一事实证明了这一点)工作)。
答案 0 :(得分:3)
您无法编写async with wait_for(...)
- wait_for
不支持异步上下文管理器。
我很快将Timeout
课程添加到asyncio
- 请参阅https://groups.google.com/forum/#!topic/python-tulip/aRc3VBIXyRc对话。
现在你可以尝试aiohttp.Timeout
(它需要安装一个足够胖的包) - 或者只是复制这40行代码。
有趣的是:这种方法并不需要async with
- 只需要旧的with
即可。
UPD 我错过了你已经使用过aiohttp了。 因此,请遵循aiohttp timeouts chapter中的第二个示例。