Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带超时的feedparser_Python_Feedparser - Fatal编程技术网

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。这让我可以同时做这两件事。谢谢