фидпарсер с таймаутом - PullRequest
       2

фидпарсер с таймаутом

9 голосов
/ 19 марта 2012

Мой код застрял при вызове этой функции:

feedparser.parse("http://...")

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

Ответы [ 2 ]

13 голосов
/ 05 сентября 2016

Использовать библиотеку Python requests для сетевого ввода-вывода, feedparser только для анализа:

# Do request using requests library and timeout
try:
    resp = requests.get(rss_feed, timeout=20.0)
except requests.ReadTimeout:
    logger.warn("Timeout when reading RSS %s", rss_feed)
    return

# Put it to memory stream object universal feedparser
content = BytesIO(resp.content)

# Parse content
feed = feedparser.parse(content)
13 голосов
/ 19 марта 2012

Глобальное время ожидания можно указать с помощью socket.setdefaulttimeout().

Время ожидания может ограничивать продолжительность отдельной операции сокета - feedparser.parse() может выполнять много операций с сокетом и, следовательно, общее время, потраченное на DNS, установление соединения tcp, отправка / получение данных, может быть намного больше. См. Время ожидания чтения с использованием либо urllib2, либо любой другой библиотеки http .

...