2012-03-19 75 views
6

我的代码就死在这个函数调用:feedparser与超时

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

此工作过。该网址甚至无法在浏览器中打开。 你会如何治疗这种情况?有没有超时的可能性?我希望继续下去,好像什么事都不会发生(仅在打印某条消息或记录此问题时)

回答

11

您可以使用socket.setdefaulttimeout()指定全局超时。

超时可能会限制单个套接字操作可能持续的时间 - feedparser.parse()可能执行许多套接字操作,因此花在dns上的总时间,建立tcp连接,发送/接收数据可能会更长。见Read timeout using either urllib2 or any other http library

+0

OK,我用它,但不知道是否行得通,因为无尽的加载URL再次生效。 – xralf 2012-03-19 15:33:16

6

使用Python requests库网络IO,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)