requests.post 可以在慢速(但不是死)连接上超时吗? [复制]

Posted

技术标签:

【中文标题】requests.post 可以在慢速(但不是死)连接上超时吗? [复制]【英文标题】:Can requests.post time out on a slow (but not dead) connection? [duplicate] 【发布时间】:2018-05-13 07:42:46 【问题描述】:

我正在使用带有 Raspbian 8 (Jessie) 的 Raspberry Pi 3 使用单元连接将数据发布到服务器,这可能不可靠。我遇到了一个棘手的错误,即发送数据的线程挂起但没有超时,因此数据发布完全暂停了很长一段时间,没有记录等。

我已经通过人为地显着减慢 Pi 的连接速度来复制这一点(使用 tc/netem 增加大约 20 秒的延迟)。执行此操作时,请求将挂起的时间比超时时间长得多。我假设(但不确定)这是因为只有很少的数据包通过慢速连接。如果发生这种情况,有没有办法引发错误?还是我的假设错了?

请求代码:

result = requests.post(target_url, json=data_dict, timeout=5)

谢谢

【问题讨论】:

【参考方案1】:

根据docs:

timeout不是整个响应下载的时间限制;相反,如果服务器在 timeout 秒内没有发出响应(更准确地说,如果在 timeout 秒内底层套接字上没有收到任何字节),则会引发异常。

换句话说,您看到的行为是预期的——只要服务器在超时到期之前开始发出响应,就不会触发超时。

【讨论】:

谢谢!您知道是否有任何方法可以在一定时间后使请求超时(或引发另一个错误),无论它是否完成? @RuaraidhDobson:是的。请参阅我已将其标记为重复的问题。 谢谢您-您说得对,这对您有很大帮助。抱歉重复的问题。

以上是关于requests.post 可以在慢速(但不是死)连接上超时吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python3+requests:post请求四种传送正文方式(详解)

我需要一个慢速 C# 函数

使用 json.dumps 时 requests.post 失败 [重复]

我应该为这个慢速多连接查询添加哪些索引?

python+requests——post提交文件

在代码中检测iOS模拟器中慢速动画是不是打开/关闭