关于python:feedparser超时

feedparser with timeout

我的代码卡在这个函数调用上:

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

这之前有用。 该网址甚至无法在浏览器中打开。
你会如何治愈这种情况? 是否有超时可能性? 我想继续,好像什么都不会发生(只有打印一些消息或记录此问题)


将Python requests库用于网络IO,仅使用feedparser进行解析:

1
2
3
4
5
6
7
8
9
10
11
12
# 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)


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

超时可能会限制单个套接字操作可能持续多长时间 - feedparser.parse()可能执行许多套接字操作,因此在dns上花费的总时间,建立tcp连接,发送/接收数据可能会更长。 请参阅使用urllib2或任何其他http库读取超时。