2012-03-19 4 views
6

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

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

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

ответ

11

Вы можете указать тайм-аут глобально, используя socket.setdefaulttimeout().

Тайм-аут может ограничивать продолжительность работы отдельного сокета - feedparser.parse() может выполнять много операций сокета, и поэтому общее время, затрачиваемое на dns, установление соединения tcp, отправка/получение данных может быть намного дольше. См. Read timeout using either urllib2 or any other http library.

+0

ОК, я использовал его, но не знаю, если это работает, потому что URL с бесконечной загрузкой снова активна. – xralf

6

Использование 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) 
Смежные вопросы