Я читаю XML-события с библиотекой запросов, как указано в приведенном ниже коде. Как я могу получить ошибку с потерей соединения после запуска запроса? Сервер эмулирует HTTP-запрос/длинный опрос ->http://en.wikipedia.org/wiki/Push_technology#Long_polling и не будет завершен по умолчанию. Если после 10 минут не появилось нового сообщения, цикл while должен быть завершен.Python, тайм-аут улова во время запроса потока
import requests
from time import time
if __name__ == '__main__':
#: Set a default content-length
content_length = 512
try:
requests_stream = requests.get('http://agent.mtconnect.org:80/sample?interval=0', stream=True, timeout=2)
while True:
start_time = time()
#: Read three lines to determine the content-length
for line in requests_stream.iter_lines(3, decode_unicode=None):
if line.startswith('Content-length'):
content_length = int(''.join(x for x in line if x.isdigit()))
#: pause the generator
break
#: Continue the generator and read the exact amount of the body.
for xml in requests_stream.iter_content(content_length):
print "Received XML document with content length of %s in %s seconds" % (len(xml), time() - start_time)
break
except requests.exceptions.RequestException as e:
print('error: ', e)
Сервер толчок может быть протестирована с загнутым через командную строку:
curl http://agent.mtconnect.org:80/sample\?interval\=0
Хм, похоже, что он работает. Тем не менее, я получаю только каждые 5 секунд XML-сообщение. Мне нужно, чтобы они были как можно быстрее;) – wiesson
5-секундный сон фактически не зависает над дочерним процессом. Он просто спит в основной теме. XML-сообщение должно обрабатываться сразу же после его возврата в дочерний процесс. Скорее всего, сервер или модуль 'request' добавляет задержку в 5 секунд. –
Если это сработало, вы, вероятно, можете пойти и принять ответ :) –