Can requests.post time out on a slow (but not dead) connection?
本问题已经有最佳答案,请猛点这里访问。
我正在使用RaspberryPi3和Raspbian8(Jessie)将数据发布到使用单元连接的服务器上,这是不可靠的。我遇到了一个棘手的bug,在这个bug中,发送数据的线程挂起但没有超时,因此数据发布完全暂停了很长一段时间,没有日志记录等。
我已经通过人为地显著降低PI的连接速度(使用tc/netem添加大约20秒的延迟)复制了这一点。执行此操作时,请求的挂起时间将比超时时间长得多。我假设(但不确定)这是因为只有极少数的数据包通过慢速连接。如果发生这种情况,是否有方法引发错误?或者我的假设是错误的?
请求代码:
1 | result = requests.post(target_url, json=data_dict, timeout=5) |
谢谢
根据文件:
timeout is not a time limit on the entire response download; rather, an exception is raised if the server has not issued a response for timeout seconds (more precisely, if no bytes have been received on the underlying socket for timeout seconds).
换句话说,您看到的行为是预期的——只要服务器在超时到期之前开始发出响应,就不会触发超时。