文章内容
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}')
这样就可以解决这个问题了。
黄兵个人博客原创。
评论列表