使用HTTPSConnection
创建httplib
时,很容易设置超时:
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无法访问时,我正确处理了这种情况,但不确定它何时接受我的连接但无法响应。
答案 0 :(得分:2)
标准库实现似乎不支持套接字读取操作的超时。您必须使HTTPSConnection
(技术上为HTTPResponse._safe_read
方法)非阻塞。
这里有一个类似的问题,也可能会有所帮助:
Does python's httplib.HTTPConnection block?
如果在您的情况下可以使用gevent,我会使用{{3}}来支持完全非阻塞I / O,并且您可以实现任何所需的超时方案,即使是一次连接多个连接。