Правильно ли используете httplib2 в python 3? (Тайм-аут проблемы) - PullRequest
4 голосов
/ 30 января 2010

Эй, первый пост, я действительно застрял на httplib2. Я читал об этом на diveintopython3.org, но в нем ничего не говорится о функции тайм-аута. Я просматриваю документацию, но вижу только возможность установить тайм-аут int, но не задано ни одной единицы измерения (секунды? Миллисекунды? Каковы значения по умолчанию, если нет?). каков ответ и попробуйте еще раз, но он никогда не пробовал более одного раза)

h = httplib2.Http('.cache', timeout=None)
for url in list:
    response, content = h.request(url)
    more stuff...

Таким образом, объект Http остается в течение некоторого произвольного времени, но я загружаю тонну страниц с того же сервера, и через некоторое время он зависает при получении страницы. Не выдается никаких ошибок, вещь просто висит на странице. Итак, я пытаюсь:

h = httplib2.Http('.cache', timeout=None)
for url in list:
    try:
        response, content = h.request(url)
    except:
        h = httplib2.Http('.cache', timeout=None)
    more stuff...

Но затем он каждый раз воссоздает другой объект Http (идет по пути «кроме») ... Я не понимаю, как продолжать получать с тем же объектом, пока он не истечет, и я создам другой. Кроме того, есть ли способ установить тайм-аут по индивидуальному запросу?

Спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 24 июля 2012

Из-за ошибки httplib2 измерял время ожидания в секундах , умноженное на 2 до версии 0.7.5 (2012-08-28).

1 голос
/ 30 января 2010

Установите время ожидания на 1, и вы довольно быстро узнаете, означает ли это одну миллисекунду или одну секунду.

Я не знаю, что должна решить ваша попытка / кроме, если она зависает в h.request (url) в одном случае, она должна висеть в другом.

Если вам не хватает памяти в этом коде, тогда httplib2 не будет правильно собирать мусор. Возможно, у вас есть циклические ссылки (хотя это не похоже на это выше), или это может быть ошибка в httlib2.

...