关于python:使用请求诊断挂起请求

Diagnosing hanging requests with requests

我已经看过几个关于使用timeout参数处理挂起请求的相关帖子,但是我不确定如何诊断我的请求是否挂起或是否存在其他潜在问题。 我正在传输一些数据并将其记录下来并将其打印到控制台。 现在两次我看到延长的时间段没有数据打印到控制台,当我中断执行时,我得到以下堆栈跟踪

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  File"/home/matthew/Dropbox/pylibs/oandapy/oandapy.py", line 276, in start
    for line in response.iter_lines(90):
  File"/home/matthew/anaconda/lib/python2.7/site-packages/requests/models.py", line 663, in iter_lines
    for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode):
  File"/home/matthew/anaconda/lib/python2.7/site-packages/requests/models.py", line 627, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File"/home/matthew/anaconda/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 240, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File"/home/matthew/anaconda/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 187, in read
    data = self._fp.read(amt)
  File"/home/matthew/anaconda/lib/python2.7/httplib.py", line 543, in read
    return self._read_chunked(amt)
  File"/home/matthew/anaconda/lib/python2.7/httplib.py", line 585, in _read_chunked
    line = self.fp.readline(_MAXLINE + 1)
  File"/home/matthew/anaconda/lib/python2.7/socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
  File"/home/matthew/anaconda/lib/python2.7/ssl.py", line 246, in recv
    return self.read(buflen)
  File"/home/matthew/anaconda/lib/python2.7/ssl.py", line 165, in read
    return self._sslobj.read(len)

是否有一些我可以设置的附加参数或某处记录有关连接的更多信息,我不清楚堆栈跟踪中的问题是什么。


您可以在创建Request对象或发送请求时为HTTP会话设置超时; 看这里:

timeout – (optional) Float describing the timeout of the request in
seconds.

但是,在传输过程中看起来有些不对劲。 出于测试目的,您可以将chunk_size = 1传递给iter_lines,并立即打印结果。 服务器可能不会发送HTTP分块终结符 r n(检查你是否有自己的服务器?值得通过https尝试其他服务器)。