为什么会引发asyncio.TimeoutError?

时间:2019-01-10 16:25:17

标签: python python-3.x python-asyncio aiohttp

我正在执行aiohttp.ClientSession实例的request(),有时会引发asyncio.TimeoutError。我认为在这种情况下必须引发aiohttp.ServerTimeoutError,它是从asyncio.TimeoutError派生的,如本文档所述:http://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ServerTimeoutError 为什么会这样呢?也许是因为我使用的是旧版本的aiohttp? 2.3.8

UPD这种情况可能会在非常简单的代码中发生,例如

async def example_of_code():
    session = aiohttp.ClientSession()
    response = await session.request(
        method='POST',
        url='some_url',
        params={'some': 'params'},
        data={'some': 'data'},
        headers={'some': 'headers'},
        timeout=10
    )
    return await response.json()

1 个答案:

答案 0 :(得分:1)

aiohttp.ServerTimeoutErrorasyncio.TimeoutError是不同的超时类型。

asyncio.TimeoutError是一个普遍的超时,它可能是由于域不存在或要读取的数据太多而导致的许多不同原因。

aiohttp.ServerTimeoutError作为source code中在aiohttp one place only中显示的搜索的内容-建立与服务器的连接时,但是从套接​​字读取内容的时间太长。您还可以查看aiohttp tests来查看实际情况,您会得到ServerTimeoutError

网络请求的操作很复杂,并且可能在许多不同的地方出错。不要试图全部理解它们(如果这不是您的目的)。只要您只想提出请求,就抓住TimeoutError(由于ServerTimeoutErrorsubclass)来看看您是否应该更改timeout kwarg。