Python:requests.exceptions.ConnectionError-每个套接字地址(协议/网络地址/端口)仅允许使用一种

时间:2020-10-07 03:15:17

标签: python get python-requests

我正在将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(),但错误仍然存​​在。

想知道如何修改我的代码来解决此问题?

1 个答案:

答案 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 >

问题解决了