Python httplib.HTTPSConnection timeout - соединение против ответа - PullRequest
1 голос
/ 05 августа 2011

При создании 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 недоступен, но не уверен, когда он принимает мое соединение, но не отвечает.

1 Ответ

2 голосов
/ 05 августа 2011

Кажется, стандартная реализация библиотеки не поддерживает тайм-аут операций чтения из сокета.Для этого вам придется отключить блокировку HTTPSConnection (технически метод HTTPResponse._safe_read).

Здесь есть похожий вопрос, который также может помочь:

Блокирует ли python httplib.HTTPConnection?

Я бы использовал gevent для всего приложения, если это возможно в вашем случае, которое поддерживает полностью неблокирующий ввод-вывод и вы можете реализоватьлюбая схема тайм-аута, которую вы хотите, даже для нескольких соединений одновременно.

...