Почему вызывается asyncio.TimeoutError? - PullRequest
0 голосов
/ 10 января 2019

Я делаю request () экземпляра aiohttp.ClientSession и иногда вызывается 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 голосов
/ 11 января 2019

aiohttp.ServerTimeoutError и asyncio.TimeoutError - это разные типы времени ожидания.

asyncio.TimeoutError - это общее время ожидания, которое может произойти по разным причинам, начиная с несуществующего домена или слишком большого количества данных для чтения.

aiohttp.ServerTimeoutError как поиск в aiohttp исходный код показывает, что используется в только в одном месте - когда соединение с сервером установлено, но некоторое чтение из сокета занимает слишком много времени. Вы также можете проверить aiohttp tests , чтобы увидеть реальные ситуации, в которых вы получаете ServerTimeoutError.

Работа сетевого запроса сложна и может работать неправильно во многих разных местах. Не пытайтесь понять их всех (если это не ваша цель). Пока вы просто хотите сделать запрос, поймайте TimeoutError (поскольку ServerTimeoutError является подклассом ), чтобы увидеть, если вы, возможно, должны изменить timeout kwarg.

...