aiohttp - 套接字传输上的致命读取错误 - TimeoutError
aiohttp - Fatal read error on socket transport - TimeoutError
我们使用带有 Python3.5 到 post 数据的 aiohttp 进行弹性搜索。 post行如下:
response = await self._http_session.request(method, url,
data = data_fun(), params = params)
通常一切正常,但有时会出现以下错误:
Fatal read error on socket transport
protocol: <aiohttp.parsers.StreamProtocol object at 0x7fde5eb7eeb8>
transport: <_SelectorSocketTransport fd=21 read=polling write=<polling, bufsize=261832>>
Traceback (most recent call last):
File "/usr/lib/python3.5/asyncio/selector_events.py", line 664, in _read_ready
data = self._sock.recv(self.max_size)
TimeoutError: [Errno 110] Connection timed out
如果它只是抛出异常并继续正常运行就好了。在我们的例子中,这个错误似乎导致整个 asyncio 任务(其中执行 post 请求)冻结。
我们追踪到 https://github.com/python/asyncio/blob/master/asyncio/selector_events.py#L674 的错误引发,随后调用 call_exception_handler
.
这个异常是否可能呈现 _https_session
invalid/unusable 而我们需要创建一个新的?或者我们还有什么可以做的吗?
TimeoutError
应该关闭来自 ClientSession
的一个连接。会话本身继续工作。
也许您也应该在代码中捕获异常。
抱歉,不看源码就写不下去了
P.S。
为什么不使用 async with
语句来控制响应生命周期?
喜欢
async with self._http_session.request(method, url,
data = data_fun(), params = params) as response:
...
我们使用带有 Python3.5 到 post 数据的 aiohttp 进行弹性搜索。 post行如下:
response = await self._http_session.request(method, url,
data = data_fun(), params = params)
通常一切正常,但有时会出现以下错误:
Fatal read error on socket transport
protocol: <aiohttp.parsers.StreamProtocol object at 0x7fde5eb7eeb8>
transport: <_SelectorSocketTransport fd=21 read=polling write=<polling, bufsize=261832>>
Traceback (most recent call last):
File "/usr/lib/python3.5/asyncio/selector_events.py", line 664, in _read_ready
data = self._sock.recv(self.max_size)
TimeoutError: [Errno 110] Connection timed out
如果它只是抛出异常并继续正常运行就好了。在我们的例子中,这个错误似乎导致整个 asyncio 任务(其中执行 post 请求)冻结。
我们追踪到 https://github.com/python/asyncio/blob/master/asyncio/selector_events.py#L674 的错误引发,随后调用 call_exception_handler
.
这个异常是否可能呈现 _https_session
invalid/unusable 而我们需要创建一个新的?或者我们还有什么可以做的吗?
TimeoutError
应该关闭来自 ClientSession
的一个连接。会话本身继续工作。
也许您也应该在代码中捕获异常。
抱歉,不看源码就写不下去了
P.S。
为什么不使用 async with
语句来控制响应生命周期?
喜欢
async with self._http_session.request(method, url,
data = data_fun(), params = params) as response:
...