【问题标题】:Python httplib.HTTPSConnection timeout -- connection vs. responsePython httplib.HTTPSConnection 超时——连接与响应
【发布时间】:2011-10-20 14:03:03
【问题描述】:

使用httplib 创建HTTPSConnection 时,很容易设置超时:

connection = httplib.HTTPSConnection('some.server.com', timeout=10)
connection.request('POST', '/api', xml, headers={'Content-Type': 'text/xml'})
response = connection.getresponse().read()

这个操作有不同的部分,例如正在接受连接并收到响应。

超时是否适用于整个操作?如果远程主机接受连接但从不发回响应,它仍然会超时吗?我想确保设置超时确保操作最多阻塞 10 秒。

一些上下文:

我正在连接到外部 API 并希望阻止该操作。只是不要超过 10 秒,如果阻塞超过 10 秒,停止阻塞并引发异常。当外部 API 无法访问但不确定它何时接受我的连接但无法响应时,我正在正确处理这种情况。

【问题讨论】:

    标签: python timeout httplib


    【解决方案1】:

    似乎标准库实现不支持套接字读取操作的超时。为此,您必须使 HTTPSConnection(技术上是 HTTPResponse._safe_read 方法)非阻塞。

    这里有一个类似的问题,可能也有帮助:

    Does python's httplib.HTTPConnection block?

    如果在您的情况下可能的话,我会为整个应用程序使用gevent,它支持完全非阻塞 I/O,并且您可以实现您想要的任何超时方案,即使是同时用于多个连接。

    【讨论】:

    • 我实际上希望它阻止。我只是想确保整个操作,从接受连接到接收响应,最多阻塞 10 秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2017-05-16
    • 2020-07-04
    相关资源
    最近更新 更多