3

为什么这不起作用:

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__and__aexit__方法的 的未来(正如有效的事实所证明的那样async with aiohttp.get())。

4

1 回答 1

5

你不能写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 超时章节中的第二个示例即可。

于 2016-01-09T13:42:03.973 回答