我正在将GET请求发送到循环内的json API,如下所示:
import requests
for iter in my_range:
url = f"http://127.0.0.1:8081/api/my_query/{iter}"
response = requests.get(url=url)
if response.status_code == 200:
< do stuff >
我能够发送236个请求/秒,并且脚本运行了几分钟,但是我认为我的所有套接字在TIME_WAIT状态到期之前就已经绑定了,并且可以重用。
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8081): Max retries exceeded with url: /api/my_query/{iter} (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x03E4BCD0>: Failed to establish a new connection: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted'))
我看到我可以将TIME_WAIT 状态从240 s降低到30 s,但是显然这可能会引起其他不良问题。我还看到an answer从套接字模块中调用 SO_REUSEADDR ,但是我找不到与该请求模块一起使用该解决方案的任何信息。我在循环中的每个请求之后尝试了 response.close(),但错误仍然存在。
想知道如何修改我的代码来解决此问题?
答案 0 :(得分:0)
感谢林(James Lin)和弗兰克·耶林(Frank Yellin)的提示!
import requests
with requests.Session() as s:
for iter in my_range:
url = f"http://127.0.0.1:8081/api/my_query/{iter}"
response = s.get(url=url)
if response.status_code == 200:
< do stuff >
问题解决了