2012-03-19 25 views
6

Mi código se quedó atascado en esta llamada de función:feedparser con tiempo de espera

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

Esto funcionó antes. La url incluso no es posible abrir en el navegador. ¿Cómo curaría este caso? ¿Hay una posibilidad de tiempo de espera? Me gustaría continuar como si nada pasaría (solo con imprimir algún mensaje o registrar este problema)

Respuesta

11

Puede especificar el tiempo de espera globalmente usando socket.setdefaulttimeout().

El tiempo de espera puede limitar cuánto tiempo puede durar una operación de socket individual: feedparser.parse() puede realizar muchas operaciones de socket y por lo tanto el tiempo total dedicado a dns, establecer la conexión tcp, enviar/recibir datos puede ser mucho más largo. Ver Read timeout using either urllib2 or any other http library.

+0

OK, he usado, pero no sé si funciona porque la URL con la carga sin fin está activo de nuevo. – xralf

6

uso de Python requests biblioteca de red IO, feedparser para analizar solamente:

# 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)