我在用requests访问我自己写的tornado时,由于数据量太大,速度过快 跑着跑着就出现了以下错误:
HTTPConnectionPool(host='localhost', port=6690): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000009717ECA6D8>: Failed to establish a new connection: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。',)) +++
这是我写的requests的访问自己写的tornado客户端的代码:
res = requests.post('http://10.67.78.44:6789', json.dumps(data))
经过别人指点这是由于:能创建socket套接字句柄的数量是有限的,无论是win还是Linux,错误信息是用光了socket, 所以无法再建立tcp链接, 所以 要么sleep()停一下; 要么就让它不要一直保持着连接,访问完,完成一次传输就断掉
这种情况有两种解决办法:
方法一:添加一个请求头,请求头内字段为:
headers = {'Connection':'close'}
然后 请求代码改为:
res = requests.post('http://10.67.78.44:6789', json.dumps(data), headers=headers)
就可以了
方法二:
s = requests.session()
s.keep_alive = False