Я искал в Интернете поиски решения моей проблемы с Python.Я пытаюсь использовать соединение urllib2 для чтения потенциально бесконечного потока данных с HTTP-сервера.Это часть интерактивного общения, поэтому важно, чтобы я мог получать доступные данные, даже если он не заполнен целым буфером.Кажется, нет никакого способа заставить read
\ readline
вернуть доступные данные.Это навсегда заблокирует ожидание всего (бесконечного) потока, прежде чем он вернется.
Даже если я установил базовый дескриптор файла неблокирующим с помощью fnctl, файл-объект urllib2 все еще блокирует !! В общем, кажется, что нет способа создать файловые объекты pythonпосле read
вернуть все доступные данные, если они есть, и заблокировать в противном случае.
Я видел несколько сообщений о людях, которые ищут помощь в этом, но я не видел решений.Что дает?Я что-то пропустил?Это похоже на такой нормальный вариант использования, чтобы полностью разрушить!Я надеюсь использовать способность urllib2 обнаруживать настроенные прокси и использовать чанкованное кодирование, но не могу, если оно не будет взаимодействовать.
Редактировать: По запросу приведен пример кода
Клиент:
connection = urllib2.urlopen(commandpath)
id = connection.readline()
Теперь предположим, что сервер использует кодирование передачи по частям, и записывает один поток в поток, и этот фрагмент содержит строку, а затем ожидает.Соединение все еще открыто, но у клиента есть данные, ожидающие в буфере.
Я не могу получить read
или readline
, чтобы вернуть данные, которые, как я знаю, ожидают его, потому что он пытается читать доконец связи.В этом случае соединение может никогда не закрыться, поэтому оно будет ждать либо навсегда , либо до истечения времени ожидания бездействия, разрывающего соединение.Как только соединение разорвано, оно вернется, но это явно не то поведение, которое мне нужно.