我使用requests
获取网址,例如:
while True:
try:
rv = requests.get(url, timeout=1)
doSth(rv)
except socket.timeout as e:
print e
except Exception as e:
print e
运行一段时间后,它会退出工作状态。没有例外或任何错误,就像暂停一样。然后我通过从控制台键入Ctrl + C来停止该过程。它表明该进程正在等待数据:
.............
httplib_response = conn.getresponse(buffering=True) #httplib.py
response.begin() #httplib.py
version, status, reason = self._read_status() #httplib.py
line = self.fp.readline(_MAXLINE + 1) #httplib.py
data = self._sock.recv(self._rbufsize) #socket.py
KeyboardInterrupt
为什么会这样?有解决方案吗?
答案 0 :(得分:5)
您发送timeout
的服务器似乎限制了您 - 也就是说,它在每个包之间发送timeout
的时间少于1秒(因此不是触发你的latency
参数),但速度足够慢,似乎卡住了。
我能想到的唯一解决方法是减少timeout
参数,除非您可以通过服务器提供程序修复此限制问题。
请注意,在设置TStream
参数时,您需要考虑TFileStream
,否则您的连接将被删除太快,可能根本不起作用。
答案 1 :(得分:0)
默认请求未设置连接或读取超时。 如果由于某种原因服务器无法在一定时间内返回客户端,则客户端将停留在连接或读取状态,主要是响应读取。
快速解决方案是在请求对象中设置超时值,此方法在此处进行了很好的描述:http://docs.python-requests.org/en/master/user/advanced/#timeouts (感谢大家。)
如果这可以解决问题,请将此标记为解决方案。谢谢。