aiohttp中如何设置整个异步HTTP请求会话的ClientTimeout超时时间?

2026-05-28 18:592阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计940个文字,预计阅读时间需要4分钟。

aiohttp中如何设置整个异步HTTP请求会话的ClientTimeout超时时间?

前言:ClientTimeout是设置整个会话的超时时间,默认情况下是300秒(5分钟)超时。

ClientTimeout默认情况下,aiohttp使用总时长超过300秒(5分钟)超时。这意味着整个操作应在5分钟内完成。

前言

ClientTimeout 是设置整个会话的超时时间,默认情况下是300秒(5分钟)超时。

ClientTimeout

默认情况下,aiocdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
'cdn.pixabay.com/photo/2018/03/12/20/07/maldives-3220702_960_720.jpg',
'cdn.pixabay.com/photo/2017/08/04/17/56/dolomites-2580866_960_720.jpg',
'cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg',
'cdn.pixabay.com/photo/2014/07/30/02/00/iceberg-404966_960_720.jpg',
'cdn.pixabay.com/photo/2014/11/02/10/41/plane-513641_960_720.jpg',
'cdn.pixabay.com/photo/2015/10/30/20/13/sea-1014710_960_720.jpg',
'cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
]

fp = Path('./down_img')
if not fp.exists():
fp.mkdir()


loop = asyncio.get_event_loop()
loop.run_until_complete(main(URL))

由于3秒内没完成所有的请求,运行结果会抛出异常:asyncio.TimeoutError

sea-1014710_960_720.jpg 下载完成!
railroad-163518_960_720.jpg 下载完成!
plane-513641_960_720.jpg 下载完成!
iceberg-404966_960_720.jpg 下载完成!
Task exception was never retrieved
future: <Task finished name='Task-2' coro=<down_img() done, defined at D:/demo/demo/new/xuexi/d1.py:6> exception=TimeoutError()>
Traceback (most recent call last):
File "D:/demo/demo/new/xuexi/d1.py", line 12, in down_img
content = await img.read()
...
raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError

给单个请求添加timeout

如果我们的需求是每个请求设置超时,单个请求大于3秒就超时,把timeout参数放到get请求上

timeout = aiocdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
'cdn.pixabay.com/photo/2018/03/12/20/07/maldives-3220702_960_720.jpg',
'cdn.pixabay.com/photo/2017/08/04/17/56/dolomites-2580866_960_720.jpg',
'cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg',
'cdn.pixabay.com/photo/2014/07/30/02/00/iceberg-404966_960_720.jpg',
'cdn.pixabay.com/photo/2014/11/02/10/41/plane-513641_960_720.jpg',
'cdn.pixabay.com/photo/2015/10/30/20/13/sea-1014710_960_720.jpg',
'cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
]

fp = Path('./down_img')
if not fp.exists():
fp.mkdir()


loop = asyncio.get_event_loop()
loop.run_until_complete(main(URL))

这样写其实并不会达到我们的预期,官方文档上说对于如下请求,超时可能会被覆盖ClientSession.get()

那你timeout不管放在ClientSession() 还是单个get/post请求里,其实效果都一样,都是针对整个会话超时。

捕获超时异常 asyncio.TimeoutError

触发的超时异常是 asyncio.TimeoutError,从Traceback可以看到是​​content = await img.read()​​ 这里报错

import aiocdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
'cdn.pixabay.com/photo/2018/03/12/20/07/maldives-3220702_960_720.jpg',
'cdn.pixabay.com/photo/2017/08/04/17/56/dolomites-2580866_960_720.jpg',
'cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg',
'cdn.pixabay.com/photo/2014/07/30/02/00/iceberg-404966_960_720.jpg',
'cdn.pixabay.com/photo/2014/11/02/10/41/plane-513641_960_720.jpg',
'cdn.pixabay.com/photo/2015/10/30/20/13/sea-1014710_960_720.jpg',
'cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
]

fp = Path('./down_img')
if not fp.exists():
fp.mkdir()


loop = asyncio.get_event_loop()
loop.run_until_complete(main(URL))

运行结果:

plane-513641_960_720.jpg 下载完成!
maldives-3220702_960_720.jpg 下载完成!
sea-1014710_960_720.jpg 下载完成!
dolomites-2580866_960_720.jpg 下载完成!
iceberg-404966_960_720.jpg 下载完成!
mountain-477832_960_720.jpg 下载完成!
timeout: cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg
timeout: cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg
timeout: cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg
timeout: cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg




aiohttp中如何设置整个异步HTTP请求会话的ClientTimeout超时时间?

本文共计940个文字,预计阅读时间需要4分钟。

aiohttp中如何设置整个异步HTTP请求会话的ClientTimeout超时时间?

前言:ClientTimeout是设置整个会话的超时时间,默认情况下是300秒(5分钟)超时。

ClientTimeout默认情况下,aiohttp使用总时长超过300秒(5分钟)超时。这意味着整个操作应在5分钟内完成。

前言

ClientTimeout 是设置整个会话的超时时间,默认情况下是300秒(5分钟)超时。

ClientTimeout

默认情况下,aiocdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
'cdn.pixabay.com/photo/2018/03/12/20/07/maldives-3220702_960_720.jpg',
'cdn.pixabay.com/photo/2017/08/04/17/56/dolomites-2580866_960_720.jpg',
'cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg',
'cdn.pixabay.com/photo/2014/07/30/02/00/iceberg-404966_960_720.jpg',
'cdn.pixabay.com/photo/2014/11/02/10/41/plane-513641_960_720.jpg',
'cdn.pixabay.com/photo/2015/10/30/20/13/sea-1014710_960_720.jpg',
'cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
]

fp = Path('./down_img')
if not fp.exists():
fp.mkdir()


loop = asyncio.get_event_loop()
loop.run_until_complete(main(URL))

由于3秒内没完成所有的请求,运行结果会抛出异常:asyncio.TimeoutError

sea-1014710_960_720.jpg 下载完成!
railroad-163518_960_720.jpg 下载完成!
plane-513641_960_720.jpg 下载完成!
iceberg-404966_960_720.jpg 下载完成!
Task exception was never retrieved
future: <Task finished name='Task-2' coro=<down_img() done, defined at D:/demo/demo/new/xuexi/d1.py:6> exception=TimeoutError()>
Traceback (most recent call last):
File "D:/demo/demo/new/xuexi/d1.py", line 12, in down_img
content = await img.read()
...
raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError

给单个请求添加timeout

如果我们的需求是每个请求设置超时,单个请求大于3秒就超时,把timeout参数放到get请求上

timeout = aiocdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
'cdn.pixabay.com/photo/2018/03/12/20/07/maldives-3220702_960_720.jpg',
'cdn.pixabay.com/photo/2017/08/04/17/56/dolomites-2580866_960_720.jpg',
'cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg',
'cdn.pixabay.com/photo/2014/07/30/02/00/iceberg-404966_960_720.jpg',
'cdn.pixabay.com/photo/2014/11/02/10/41/plane-513641_960_720.jpg',
'cdn.pixabay.com/photo/2015/10/30/20/13/sea-1014710_960_720.jpg',
'cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
]

fp = Path('./down_img')
if not fp.exists():
fp.mkdir()


loop = asyncio.get_event_loop()
loop.run_until_complete(main(URL))

这样写其实并不会达到我们的预期,官方文档上说对于如下请求,超时可能会被覆盖ClientSession.get()

那你timeout不管放在ClientSession() 还是单个get/post请求里,其实效果都一样,都是针对整个会话超时。

捕获超时异常 asyncio.TimeoutError

触发的超时异常是 asyncio.TimeoutError,从Traceback可以看到是​​content = await img.read()​​ 这里报错

import aiocdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
'cdn.pixabay.com/photo/2018/03/12/20/07/maldives-3220702_960_720.jpg',
'cdn.pixabay.com/photo/2017/08/04/17/56/dolomites-2580866_960_720.jpg',
'cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg',
'cdn.pixabay.com/photo/2014/07/30/02/00/iceberg-404966_960_720.jpg',
'cdn.pixabay.com/photo/2014/11/02/10/41/plane-513641_960_720.jpg',
'cdn.pixabay.com/photo/2015/10/30/20/13/sea-1014710_960_720.jpg',
'cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg',
'cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg',
]

fp = Path('./down_img')
if not fp.exists():
fp.mkdir()


loop = asyncio.get_event_loop()
loop.run_until_complete(main(URL))

运行结果:

plane-513641_960_720.jpg 下载完成!
maldives-3220702_960_720.jpg 下载完成!
sea-1014710_960_720.jpg 下载完成!
dolomites-2580866_960_720.jpg 下载完成!
iceberg-404966_960_720.jpg 下载完成!
mountain-477832_960_720.jpg 下载完成!
timeout: cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg
timeout: cdn.pixabay.com/photo/2016/06/20/03/15/pier-1467984_960_720.jpg
timeout: cdn.pixabay.com/photo/2013/07/18/10/56/railroad-163518_960_720.jpg
timeout: cdn.pixabay.com/photo/2014/10/07/13/48/mountain-477832_960_720.jpg




aiohttp中如何设置整个异步HTTP请求会话的ClientTimeout超时时间?