为什么在将数据上传到数据库时总是看到“重置断开的连接”?

2024-04-27 04:03:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过REST API将数亿个项目从Heroku上的云服务器上传到AWS EC2上的数据库。我正在使用Python,并且我经常在日志中看到以下信息日志消息。

[requests.packages.urllib3.connectionpool] [INFO] Resetting dropped connection: <hostname>

这种“重置断开的连接”似乎需要很多秒(有时30秒以上),我的代码才能继续执行。

  • 首先这里到底发生了什么?为什么?
  • 其次,有没有办法阻止连接断开,以便我能够更快地上传数据?

谢谢你的帮助。 安德鲁。


Tags: 项目info服务器awsrestapi信息数据库
3条回答

这是公开restfulapi以避免滥用(或DoS)的服务的常见做法。
如果你给他们的API施加压力,他们会断开你的连接。
试着让你的脚本每隔一段时间就睡一会儿,以避免掉下来。

问题是服务器已经关闭了连接,即使客户端请求保持连接的活动性。

这不一定是因为服务器不支持keepalives,但可能是服务器配置为只允许连接上的特定数量的请求。这可以帮助将请求分散到不同的服务器上,但我认为这种做法是/曾经是一种常见的做法,它是针对在服务器(例如PHP)中运行的编写不好的代码(可能是由于错误条件等)的一种实际防御措施

如果您认为这是您的情况,并且您不希望看到这些日志(在信息级别记录),则可以添加以下内容来停止该部分日志:

# Really don't need to hear about connections being brought up again after server has closed it
logging.getLogger("requests.packages.urllib3.connectionpool").setLevel(logging.WARNING)

请求使用^{} by defaultResetting dropped connection,根据我的理解,这意味着一个应该存在的连接以某种方式断开了。可能的原因有:

  1. 服务器不支持Keep-Alive
  2. 已建立的连接中有一段时间没有数据传输,因此服务器将断开连接。

有关详细信息,请参见https://stackoverflow.com/a/25239947/2142577

相关问题 更多 >