我的代码卡在这个函数调用上:
feedparser.parse("http://...")
之前有效。该网址甚至无法在浏览器中打开。 你会如何治愈这种情况?是否有超时可能性?我想继续,好像什么都不会发生(只有打印一些消息或记录这个问题)
答案 0 :(得分:13)
您可以使用socket.setdefaulttimeout()
全局指定超时。
超时可能会限制单个套接字操作可能持续的时间 - feedparser.parse()
可能会执行许多套接字操作,因此在dns上花费的总时间,建立tcp连接,发送/接收数据可能会更长。请参阅Read timeout using either urllib2 or any other http library。
答案 1 :(得分:13)
将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)
答案 2 :(得分:2)
根据作者的建议[1],应使用请求库执行http请求,并将结果解析到feedparser。