【问题标题】:Python requests module connection timeoutPython 请求模块连接超时
【发布时间】:2014-07-16 15:25:13
【问题描述】:

我正在查看http://docs.python-requests.org/en/latest/,并且“连接超时”被列为一项功能。但是,当我进一步阅读时,它指出

超时不是整个响应下载的时间限制;相反,如果服务器在 timeout 秒内没有发出响应(更准确地说,如果在 timeout 秒内底层套接字上没有收到任何字节),则会引发异常。

这听起来不像是连接超时的描述。我看到的是连接成功,它上传一个大文件,然后等待响应。但是,响应需要一段时间然后超时。

如何设置连接超时,但连接成功后仍等待缓慢响应?非常感谢。

【问题讨论】:

标签: python python-requests


【解决方案1】:

请求(针对人类)库有连接超时,请参阅 - https://requests.kennethreitz.org/en/master/user/advanced/#timeouts

r = requests.get('https://github.com', timeout=(3.05, 27))

# e.g. explicitly
conn_timeout = 6
read_timeout = 60
timeouts = (conn_timeout, read_timeout)
r = requests.get('https://github.com', timeout=timeouts)

文档并未明确说明元组中的哪个值,但可以安全地假设它是 (connect, read) 超时。

【讨论】:

  • 这是设置超时最实用的答案
【解决方案2】:

超时用于套接字连接阶段和响应读取阶段。唯一的例外是 streamed 请求;如果您设置stream=True,则无法将超时应用于读取部分。超时确实只是用于等待套接字连接或接收数据。

如果您需要整体超时,则使用另一种技术,例如使用中断或小事件:Timeout for python requests.get entire response

【讨论】:

  • 请注意,这并不意味着您不会收到带有stream=True 的读取超时异常。
猜你喜欢
  • 2015-08-14
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多