Python 带超时的feedparser
我的代码在此函数调用中卡住:Python 带超时的feedparser,python,feedparser,Python,Feedparser,我的代码在此函数调用中卡住: feedparser.parse("http://...") 这以前是有效的。甚至无法在浏览器中打开url。 你将如何治愈这个病例?有可能超时吗?我想继续,就好像什么也不会发生一样(只打印一些消息或记录此问题)您可以使用socket.setdefaulttimeout()全局指定超时 超时可能会限制单个套接字操作的持续时间--feedparser.parse()可能会执行许多套接字操作,因此在dns、建立tcp连接、发送/接收数据上花费的总时间可能要长得多。请参阅
feedparser.parse("http://...")
这以前是有效的。甚至无法在浏览器中打开url。
你将如何治愈这个病例?有可能超时吗?我想继续,就好像什么也不会发生一样(只打印一些消息或记录此问题)您可以使用
socket.setdefaulttimeout()
全局指定超时
超时可能会限制单个套接字操作的持续时间--
feedparser.parse()
可能会执行许多套接字操作,因此在dns、建立tcp连接、发送/接收数据上花费的总时间可能要长得多。请参阅。使用Python请求
库进行网络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)
根据作者的建议[1],应该使用请求库进行http请求,并将结果解析到feedparser
[1] 好的,我使用了它,但不知道它是否有效,因为无休止加载的URL再次处于活动状态。这比指定全局超时要好,但由于我在回答中指出的原因(
requests.get()
的阻塞时间可能比timeout
值长得多)。点击链接了解详细信息。我喜欢这个解决方案。对于我的目的,我有非常好的http设置,但是我想为rss提要中的变体提供feedparser。这让我可以同时做这两件事。谢谢