请求进程挂起

bin*_*381 5 python python-requests

我正在使用requests获取URL,例如:

while True:
    try:
        rv = requests.get(url, timeout=1)
        doSth(rv)
    except socket.timeout as e:
        print e
    except Exception as e:
        print e
Run Code Online (Sandbox Code Playgroud)

运行一段时间后,它会退出工作状态.没有例外或任何错误,就像暂停一样.然后我通过从控制台键入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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?有解决方案吗?

nls*_*bch 6

您发送给您的服务器似乎request会限制您 - 也就是说,它bytes在每个程序包之间发送的时间少于1秒(因此不会触发您的timeout参数),但速度足够慢以使其看起来卡住了.

我能想到的唯一解决方法是减少timeout参数,除非您可以通过服务器提供程序修复此限制问题.

请记住,latency在设置timeout参数时 您需要考虑,否则您的连接将被删除太快,可能根本不起作用.