开发者

Python httplib.HTTPSConnection timeout -- connection vs. response

开发者 https://www.devze.com 2023-03-26 06:07 出处:网络
When creating an HTTPSConnection with httplib, easy enough to set a timeout: connection = httplib.HTTPSConnection(\'some.server.com\', timeout=10)

When creating an HTTPSConnection with httplib, easy enough to set a timeout:

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

There are various parts to this operation, e.g. the connection being accepted and a response being received.

Does the timeout apply to the entire operation? Will it still timeout if the remote host accepts the connection but never sends back a response? I want to be sure that setting the timeout ensure that the operation blocks for a maximum of 10 seconds.

Some context:

I am connecting to an external API and want the 开发者_如何学Pythonoperation to block. Just not for more than 10 seconds, and if it is blocking for more than 10 seconds, stop blocking and raise an exception. I'm correctly handling the case when an external API is unreachable, but unsure about when it accepts my connection but fails to respond.


It seems the standard library implementation does not support a timeout on the socket read operations. You would have to make the HTTPSConnection (technically the HTTPResponse._safe_read method) non-blocking for this.

There is a similar question here, which might also help:

Does python's httplib.HTTPConnection block?

I would use gevent for the whole application if that's possible in your case, that supports fully non-blocking I/O and you can implement any timeout scheme you want, even for multiple connections at once.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号