aiohttp 异步http请求-8.TCPConnector限制连接池的大小

网友投稿 304 2022-09-06


aiohttp 异步http请求-8.TCPConnector限制连接池的大小

前言

使用TCPConnector里面的limit参数限制连接池的大小

limit:同时连接的最大数量, 默认是30limit_per_host: 同一端点的最大连接数量。同一端点即(host, port, is_ssl)完全相同,默认是0,不限制

TCPConnector

当没有设置limit参数的时候,默认值是100 (limit=100),以下是TCPConnector部分源码

class TCPConnector(BaseConnector): """TCP connector. limit - The total number of simultaneous connections. limit_per_host - Number of simultaneous connections to one host. """ def __init__( self, ...... limit: int = 100,

如果要限制同时打开的连接数量,可以修改limit的值,如下是设置30个连接数:

conn = aioverify_ssl=False) async with aioas session:

如果您明确不希望有限制,请传递0。例如:

conn = aio参数限制同时打开的连接到同一端点的数量, 同一端点即(host, port, is_ssl)完全相同,默认是0,不限制。

conn = aio​​limit=1​​ 时连接数是1

import aioasynciofrom pathlib import Pathasync def down_img(session, url): """下载图片""" name = url.split('/')[-1] # 获得图片名字 img = await session.get(url) print(f'下载状态:{img.status}') # 触发到await就切换,等待get到数据 content = await img.read() # 读取内容 with open('./down_img/'+str(name), 'wb') as f: # 写入至文件 f.write(content) print(f'{name} 下载完成!') return str(url)async def main(URL): conn = aiossl=False) # 建立会话session async with aioas session: # 建立所有任务 tasks = [asyncio.create_task(down_img(session, img_url)) for img_url in URL] # 触发await,等待任务完成 done, pending = await asyncio.wait(tasks) all_results = [done_task.result() for done_task in done] # 获取所有结果 print("ALL RESULT:"+str(all_results))URL = [ ' ' ' ' ' ' ' '= Path('./down_img')if not fp.exists(): fp.mkdir()loop = asyncio.get_event_loop()loop.run_until_complete(main(URL))

运行结果可以看到,会一个个去连接请求。

下载状态:200mountain-477832_960_720.jpg 下载完成!下载状态:200railroad-163518_960_720.jpg 下载完成!下载状态:200maldives-3220702_960_720.jpg 下载完成!下载状态:200dolomites-2580866_960_720.jpg 下载完成!下载状态:200pier-1467984_960_720.jpg 下载完成!下载状态:200iceberg-404966_960_720.jpg 下载完成!下载状态:200plane-513641_960_720.jpg 下载完成!下载状态:200sea-1014710_960_720.jpg 下载完成!

当limit设置为3的时候

conn = aiossl=False) # 建立会话session async with aioas session:

运行结果:

下载状态:200下载状态:200下载状态:200maldives-3220702_960_720.jpg 下载完成!railroad-163518_960_720.jpg 下载完成!下载状态:200下载状态:200dolomites-2580866_960_720.jpg 下载完成!pier-1467984_960_720.jpg 下载完成!下载状态:200下载状态:200plane-513641_960_720.jpg 下载完成!iceberg-404966_960_720.jpg 下载完成!下载状态:200sea-1014710_960_720.jpg 下载完成!mountain-477832_960_720.jpg 下载完成!

从运行结果可以看到,首先会连接3个(连续3个下载状态:200),当这3个中有任务完成的时候,会继续发请求(最大连接数是3).


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:aiohttp 异步http请求-7.https请求报SSL问题
下一篇:aiohttp 异步http请求-9.ClientSession自定义请求头部
相关文章

 发表评论

暂时没有评论,来抢沙发吧~