Python aiohttp 请求已停止但未引发异常
Python aiohttp request stopped but raised no exception
我使用 aiohttp
来请求 url。大多数时候它运行正常,但有时它会停止而不会引发任何异常。
正如您在代码中看到的那样,我捕获了所有异常,但是当它停止时没有打印异常日志。
日志如下所示:
get_live_league_games: while True
try
yield from aiohttp.request
但是“res = yield from r.json()
”不打印,它停止并且不抛出任何异常。
while True:
print('get_live_league_games: while True')
start = time.clock()
try:
print('try')
r = yield from aiohttp.request('GET',url)
print('yield from aiohttp.request')
res = yield from r.json()
print('res = yield from r.json()')
except aiohttp.errors.DisconnectedError as e:
logging.warning('get_live_league_games:',e)
yield from asyncio.sleep(10)
continue
except aiohttp.errors.ClientError as e:
logging.warning('get_live_league_games:',e)
yield from asyncio.sleep(10)
continue
except aiohttp.errors.HttpProcessingError as e:
logging.warning('get_live_league_games:',e)
yield from asyncio.sleep(10)
continue
except Exception as e:
logging.warning('get_live_league_games,Exception:',e)
yield from asyncio.sleep(10)
continue
print('request internet time : ', time.clock()-start)
yield from asyncio.sleep(10)
由于互联网性质,可能发生——连接可能 'hang' 很长一段时间后才会出现断开连接错误。
这就是为什么客户端 http 操作通常需要超时。
我建议将 aiohttp.request()
调用包装到 asyncio.wait_for
。
我使用 aiohttp
来请求 url。大多数时候它运行正常,但有时它会停止而不会引发任何异常。
正如您在代码中看到的那样,我捕获了所有异常,但是当它停止时没有打印异常日志。
日志如下所示:
get_live_league_games: while True
try
yield from aiohttp.request
但是“res = yield from r.json()
”不打印,它停止并且不抛出任何异常。
while True:
print('get_live_league_games: while True')
start = time.clock()
try:
print('try')
r = yield from aiohttp.request('GET',url)
print('yield from aiohttp.request')
res = yield from r.json()
print('res = yield from r.json()')
except aiohttp.errors.DisconnectedError as e:
logging.warning('get_live_league_games:',e)
yield from asyncio.sleep(10)
continue
except aiohttp.errors.ClientError as e:
logging.warning('get_live_league_games:',e)
yield from asyncio.sleep(10)
continue
except aiohttp.errors.HttpProcessingError as e:
logging.warning('get_live_league_games:',e)
yield from asyncio.sleep(10)
continue
except Exception as e:
logging.warning('get_live_league_games,Exception:',e)
yield from asyncio.sleep(10)
continue
print('request internet time : ', time.clock()-start)
yield from asyncio.sleep(10)
由于互联网性质,可能发生——连接可能 'hang' 很长一段时间后才会出现断开连接错误。
这就是为什么客户端 http 操作通常需要超时。
我建议将 aiohttp.request()
调用包装到 asyncio.wait_for
。