我正在执行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()
答案 0 :(得分:1)
aiohttp.ServerTimeoutError
和asyncio.TimeoutError
是不同的超时类型。
asyncio.TimeoutError
是一个普遍的超时,它可能是由于域不存在或要读取的数据太多而导致的许多不同原因。
aiohttp.ServerTimeoutError
作为source code中在aiohttp one place only中显示的搜索的内容-建立与服务器的连接时,但是从套接字读取内容的时间太长。您还可以查看aiohttp tests来查看实际情况,您会得到ServerTimeoutError
。
网络请求的操作很复杂,并且可能在许多不同的地方出错。不要试图全部理解它们(如果这不是您的目的)。只要您只想提出请求,就抓住TimeoutError
(由于ServerTimeoutError
是subclass)来看看您是否应该更改timeout
kwarg。