关于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
}
即可解决,也可以查看到没有占用大量新的端口