解决requests线程池中,循环调用接口获取数据报错 Failed to establish a new connection: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次的问题![
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "F:/CTC_Server_Projs/web_lt_projs/src/Activity/Activity/create_cookies.py", line 97, in get_key
result_res = login(uid)
File "F:/CTC_Server_Projs/web_lt_projs/src/Activity/Activity/create_cookies.py", line 52, in login
'PLAT': 'wechat',
File "C:\Python37\lib\site-packages\requests\sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python37\lib\site-packages\requests\sessions.py", line 596, in send
r = adapter.send(request, **kwargs)
File "C:\Python37\lib\site-packages\requests\adapters.py", line 487, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='contest2-activity.changyou.com', port=80): Max retries exceeded with url: /activitys/platform/user?user=3da03cae25ab42199400d9fcbf0d4a79&plat=wechat (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x0000014B04271940>: Failed to establish a new connection: [Errno 10048] [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。'))
①使用 regedit 命令访问 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TCPIP/Parameters 注册表子键并创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制 30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。
②使用 regedit 命令访问 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TCPIP/Parameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值。 停止并重新启动系统。 缺省值:无 建议值:至少十进制 32768。
问题解决:原来的MaxUserPort 才15000, 改成33000就好了 .
具体例子解析:
TcpTimedWaitDelay:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。 如何查看或设置: 使用 regedit 命令访问 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/TCPIP/Parameters 注册表子键并创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制 30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。 停止并重新启动系统。 缺省值:0xF0,它将等待时间设置为 240 秒(4 分钟)。 建议值:最小值为 0x1E,它将等待时间设置为 30 秒。您可以通过使用客户端计算机上的 Netstat 工具来检查有多少客户端端口处于 TIME_WAIT 状态。按如下所示使用 -n 标志运行 Netstat 工具,并数一数到您的客户端套接字中有多少处于 TIME_WAIT 状态。
在此示例中,运行 SQL Server 的远程计算机的 IP 地址是 10.10.10.20,客户端计算机的 IP 地址是 10.10.10.10,有三个已建立的连接,有两个处于 TIME_WAIT 状态的连接:
C:>netstat -n Active Connections Proto Local Address
Foreign Address State TCP 10.10.10.10:2000
10.10.10.20:1433 ESTABLISHED TCP 10.10.10.10:2001
10.10.10.20:1433 ESTABLISHED TCP 10.10.10.10:2002
10.10.10.20:1433 ESTABLISHED TCP 10.10.10.10:2003
10.10.10.20:1433 TIME_WAIT TCP 10.10.10.10:2004
10.10.10.20:1433 TIME_WAIT
如果您运行 netstat -n 并发现有将近 4000 个到运行 SQL Server 的目标计算机的 IP 地址的连接处于 TIME_WAIT 状态,
则可以增加默认 MaxUserPort 设置并同时降低 TcpTimedWaitDelay 设置,以便不会用尽客户端匿名端口。例如,您可以将 MaxUserPort 设置为 20000,将 TcpTimedWaitDelay 设置为 30。较低的 TcpTimedWaitDelay 设置意味着套接字在 TIME_WAIT 状态中等待的时间更短。较高的 MaxUserPort 设置意味着您可以让更多的套接字处于 TIME_WAIT 状态。
注意,如果调整 MaxUserPort 或 TcpTimedWaitDelay 设置,您必须重新启动 Microsoft Windows 以使新设置生效。MaxUserPort 和 TcpTimedWaitDelay 设置适用于任何通过 TCP/IP 套接字与运行 SQL Server 的计算机对话的客户端计算机。如果在运行 SQL Server 的计算机上进行这些设置,它们将不起作用,除非您是在建立本地 TCP/IP 套接字到运行 SQL Server 的本地计算机的连接。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
限制处于TIME_WAIT状态的最长时间。缺省为240秒,最低为30秒,最高为300秒。建议设为30秒。
“TcpTimedWaitDelay”=dword:0000001e
MaxUserPort :确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。 如何查看或设置: 使用 regedit 命令访问 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/TCPIP/Parameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值。 停止并重新启动系统。 缺省值:无 建议值:至少十进制 32768。 注:当在 Windows NT 或 Windows 2000 操作系统上调整 WebSphere Application Server 时,同时使用这两个参数。
如何修改注册表:https://jingyan.baidu.com/article/359911f5ac454357fe0306b2.html