关于py用requests包大量发起链接(大约数万,也差不多就是端口号数量)时报错

javaurllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x000001EF015EE920>: Failed to establish a new connection: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
我的是由于在循环里大量的调用了request.get(url,param),导致每一个请求都创建了一个套接字
cmd用netstat -nao可以看到大量timeout状态的端口使用在这里插入图片描述

查询得知,可以使用requests包的session来发起请求(如果用socket通信的话好像可以指定端口复用),这样使用的就是同一个会话,不会创建很多新的链接
但是仍然不生效,最后发现原因是我的代码结果类似于

for(i<1000{
	//xxxxxx
	for(j<20){
		requests.session().get()
	}
	//xxxxx
}

没有后续测试原理,但是将这个结构改为:

session=requests.session()
for(i<1000{
	//xxxxxx
	for(j<20){
		session.get()
	}
	//xxxxx
}

即可解决,也可以查看到没有占用大量新的端口

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐