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请求四种传送正文方式(详解)