文章内容

2021/12/10 17:43:14,作 者: 黄兵

asyncio.exceptions.TimeoutError


最近运行在服务器上的程序出现了错误,具体错误内容如下:

12-05 10:17 asyncio      ERROR    Task exception was never retrieved
future: Task finished name='Task-494697' coro= exception=TimeoutError()
Traceback (most recent call last):
  File "/var/Service_Ping_Monitor/unit/process_traceroute.py", line 54, in traceroute
    await init_web_transmission.transmission_traceroute_data(format_hops, self._monitor_server_id, ip)
  File "/var/Service_Ping_Monitor/unit/web_transmission.py", line 72, in transmission_traceroute_data
    async with session.post(url=self._post_traceroute_data_uri, data=payload) as resp:
  File "/var/Service_Ping_Monitor/venv/lib/python3.8/site-packages/aiohttp/client.py", line 1117, in __aenter__
    self._resp = await self._coro
  File "/var/Service_Ping_Monitor/venv/lib/python3.8/site-packages/aiohttp/client.py", line 619, in _request
    break
  File "/var/Service_Ping_Monitor/venv/lib/python3.8/site-packages/aiohttp/helpers.py", line 656, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutErrorch

 出现问题的原因:

aiohttp.ClientSession() 未设置超时时间,具体错误代码如下:

async def transmission_traceroute_data(self, traceroute_data, monitor_id, ip):
payload_dict = {'monitor_server_id': monitor_id, 'ip': ip, 'tracerouteData': traceroute_data}
payload = json.dumps(payload_dict)
async with aiohttp.ClientSession() as session:
try:
async with session.post(url=self._post_traceroute_data_uri, data=payload) as resp:
self._logger.info(f'提交成功,结果:{resp.text()}')
except ClientError as e:
self._logger.error(f'向远程提交traceroute数据的时候出现错误,具体错误内容: {e}')

解决方案:

设置超时时间,修改后的代码如下:

async def transmission_traceroute_data(self, traceroute_data, monitor_id, ip):
payload_dict = {'monitor_server_id': monitor_id, 'ip': ip, 'tracerouteData': traceroute_data}
payload = json.dumps(payload_dict)
timeout = ClientTimeout(total=1000)
async with aiohttp.ClientSession(timeout=timeout) as session:
try:
async with session.post(url=self._post_traceroute_data_uri, data=payload) as resp:
self._logger.info(f'提交成功,结果:{resp.text()}')
except ClientError as e:
self._logger.error(f'向远程提交traceroute数据的时候出现错误,具体错误内容: {e}')

这样就可以解决这个问题了。


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - asyncio.exceptions.TimeoutError

分享到:

发表评论

评论列表