aiohttp 超时问题 访问不同url的时候 如何分别返回结果和超时?
源码如下:
import asyncio,time
import aiohttp
async def request(url):
timeout = aiohttp.ClientTimeout(total=6)
requests_start_time = time.clock()
#使用aiohttp发起request请求。
try:
async with aiohttp.request("GET",url,timeout=timeout) as res:
#r.read()不变吗,直接读取。返回来是二进制文件
try:
response = await res.text()
except Exception as e:
e = str(e)
e = e.lower()
if 'utf-8' in e:
response = await res.text('utf-8', 'ignore')
elif 'gbk' in e or 'gb2312' in e:
response = await res.text('gbk', 'ignore')
requests_end_time = time.clock()
request_time = requests_end_time - requests_start_time
request_time = round(request_time, 3)
print(res.status,res.charset,request_time,response)
except Exception as e:
print(url,'timeout')
pass
if __name__ == '__main__':
urls = [
'http://127.0.0.1:8882/test_get',
'http://127.0.0.1:8882/test_get_timeout_5',
'http://127.0.0.1:8882/test_get_timeout_10',
'http://127.0.0.1:8882/test_get_timeout_15',
]
#任务列表,存放多个任务对象
stasks=[]
for url in urls:
c = request(url)
task = asyncio.ensure_future(c)
stasks.append(task)
loop = asyncio.get_event_loop()
#需要将任务列表封装到wait中
loop.run_until_complete(asyncio.wait(stasks))
其中api如下:
'http://127.0.0.1:8882/test_get',
'http://127.0.0.1:8882/test_get_timeout_5',
'http://127.0.0.1:8882/test_get_timeout_10',
'http://127.0.0.1:8882/test_get_timeout_15',
test_get没有设置time.sleep(),其他依次为5秒、10秒、15秒
aiohttp.request 设置为timeout = aiohttp.ClientTimeout(total=6)
希望能实现以下api,能正确返回,但结果是全部一起timeout
'http://127.0.0.1:8882/test_get',
'http://127.0.0.1:8882/test_get_timeout_5',
如果不设定aiohttp.request 设置为timeout = aiohttp.ClientTimeout(total=6)
全部总时间非常奇怪,有时候是30.033秒,有时候高达60秒。
请问要怎么实现对于超时的api报异常,没有超时的能正确返回内容,谢谢大家
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论