1

创建HTTPSConnectionwith 时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 无法访问时,我正在正确处理这种情况,但不确定它何时接受我的连接但无法响应。

4

1 回答 1

2

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

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

python 的 httplib.HTTPConnection 会阻塞吗?

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

于 2011-08-05T09:38:40.107 回答