Python httplib.HTTPSConnection 超时 -- 连接与响应
在使用 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无法访问的情况,但不太确定当它接受我的连接却没有响应时该怎么处理。
1 个回答
2
看起来标准库的实现不支持在套接字读取操作时设置超时。如果你想要这个功能,就得把 HTTPSConnection
(实际上是 HTTPResponse._safe_read
方法)改成非阻塞模式。
这里有一个类似的问题,可能也会对你有帮助:
Python的 httplib.HTTPConnection 会阻塞吗?
如果你的情况允许的话,我建议你使用 gevent 来处理整个应用程序,它支持完全非阻塞的输入输出,你可以实现任何你想要的超时方案,甚至可以同时处理多个连接。