Найти - Пользователи
Полная версия: Зависание функции read() в urllib2
Начало » Python для новичков » Зависание функции read() в urllib2
1
maofet
Добрый день.
Пользуюсь Python 2.7 и столкнулся с такой проблемой:
в цикле происходит получение html-кода страницы.
st = urllib2.urlopen(a)
b = st.read()
Циклов около 1000. На произвольном месте переменная st определяется, а получение переменной b зависает на бесконечное время.
Пробовал добавлять st.close() - не помогло.
Пробовал ставить таймер - не помогло.
Если открыть ссылку в браузере - все ок. Если перезапусить скрипт, то на этой ссылке будет тоже все ок, но на другой обязательно зависнет.
Чем это может быть вызвано? И какие есть решения, в т.ч. обходные пути?
Заранее благодарен за ответ.
odnochlen
Посмотри снифферов, напр. Wireshark, Commview.
maofet
Попробовал установить WireShark.
Для меня, к сожалению, довольно сложный продукт.
Что я смог установить:
При получении данных часто возникают warnings двух типов:
1. Previous segment not captured
2. Duplicate ACK
Если то, о чем говорится в первом, я могу предположить, то о втором я в поиске тоже не нашел дельных описаний.
Причем, судя по наблюдениям п.1 не всегда критичен для получения данных.
А что делать с п.2?
odnochlen
Ты в слишком низкоуровневую хрень залез.

1. Напиши в строку фильтра http.
2. Щелкни правой кнопкой на пакете -> follow tcp stream. И читай там.

То же самое в commview - два раза щелкаешь на любом непустом tcp пакете и дальше щелкаешь “следующая сессия” Там даже есть просмотровщик html.
maofet
А что я там должен увидеть?
После нажатия на Follow tcp stream мне вывелся html, но он не подсвечивает, как я понимаю, в каком месте кода html ошибка…
odnochlen
read() блокирует, если сервер ничего не посылает. Ты можешь посмотреть, что при этом происходит в сети.

А вообще я бы тебе советовал взять grab или requests. Встроенные библиотеки питона зело убоги.
maofet
Спасибо, с requests действительно не возникает пока таких проблем!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB