Python Requests HTTP连接池和最大重试次数超出限制

12 投票
2 回答
53615 浏览
提问于 2025-04-18 08:37

在一个Linux集群上,我遇到了这个错误,使用的是Requests库:

ConnectionError: HTTPConnectionPool(host='andes-1-47', port=8181): 最大重试次数超过,网址是:/jammy/api/v1(原因是:'')

这个错误是什么意思?是Requests库的问题,还是主机的问题?该怎么解决呢?

顺便说一下,这个程序在Windows和Linux的独立机器上使用localhost时运行得很好。

2 个回答

2

在调用 urlopen 时,可以试着把 retries 设置为 False 或者 1,看看有什么不同。默认值是 3,这个设置听起来还挺合理的。

http://urllib3.readthedocs.org/en/latest/pools.html#urllib3.connectionpool.HTTPConnectionPool.urlopen

13

关于 Max retries exceeded with url: ... 这个错误,可能会让人感到很困惑。根据你提到的在本地(localhost)可以正常工作,这很可能是你在某个地方部署的应用程序。这也解释了为什么主机名是 andes-1-47,而不是大家通常会期待的那种(比如 example.com)。我猜测你需要使用 andes-1-47 的IP地址(例如 192.168.0.255),或者你的Linux集群不知道怎么解析 andes-1-47,你应该把它添加到你的 /etc/hosts 文件中(也就是说,添加这一行: 192.168.0.255 andes-1-47)。

如果你想检查一下你的Linux集群能否解析这个名字,可以使用这个脚本:

import socket

socket.create_connection(('andes-1-47', 8181), timeout=2)

如果无法解析主机名,这个脚本会在2秒后超时。(你可以去掉超时设置,但那样可能需要更长时间才能确定主机名是否可达。)

撰写回答