首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化App Engine RSS解析,避免高CPU警告

优化App Engine RSS解析,避免高CPU警告
EN

Stack Overflow用户
提问于 2010-04-02 04:48:17
回答 5查看 1.9K关注 0票数 5

我将一些RSS feed放入app Engine的数据存储中,以便为iPhone应用程序提供服务。我使用cron计划每x分钟更新一次RSS。每个任务只解析一个RSS提要(有15-20个条目)。我经常收到关于App Engine仪表板中CPU使用率过高的警告,所以我正在寻找优化代码的方法。

目前,我使用的是minidom (因为它已经在App Engine上了),但我怀疑它的效率不是很高!

代码如下:

代码语言:javascript
运行
复制
 dom = minidom.parseString(urlfetch.fetch(url).content)
    if dom:
        items = []
        for node in dom.getElementsByTagName('item'):
            item = RssItem(
                key_name = self.getText(node.getElementsByTagName('guid')[0].childNodes),
                title = self.getText(node.getElementsByTagName('title')[0].childNodes),
                description = self.getText(node.getElementsByTagName('description')[0].childNodes),
                modified = datetime.now(),
                link = self.getText(node.getElementsByTagName('link')[0].childNodes),
                categories = [self.getText(category.childNodes) for category in node.getElementsByTagName('category')]
            );
            items.append(item);
        db.put(items);

def getText(self, nodelist):
    rc = ''
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
    return rc

没有太多的事情要做,但是脚本通常需要2-6秒的CPU时间,对于遍历20多个项目和读取一些属性来说,这似乎有点过多。

我能做些什么来让它更快呢?上面的代码中有什么特别糟糕的地方吗?或者我应该换一种解析方式?有没有更好的库(在App Engine上工作),或者我自己解析RSS会更好?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-02 06:45:56

通过例如superfeedr的外包提要解析

你也可以研究一下superfeedr.com。他们有一个合理的免费配额/付费计划。他们将为您/等做轮询(在15分钟内您将获得更新)。如果提要也支持pubsubhubbub,那么您将实时接收提要!如果你还不知道,这段视频将向你解释什么是pubsubhubbub

由Brett Slatkin编写的改进的提要解析器

我还建议你看看Brett Slatkin解释pubsubhubbub的这个很棒的video。我还记得,在演示文稿中的某个地方,他说他不使用Universal Feedparser,因为它只是为他的问题做了很多工作。他编写了自己的SAX解析器(在视频演示中他稍微谈到了这一点),解析器的速度非常快。我想你应该看看pubsubhubbub code,看看他是如何做到这一点的。

票数 4
EN

Stack Overflow用户

发布于 2010-04-02 05:09:39

我会试试ElementTreeUniversal Feed Parser,看看他们是不是更好。从Python2.5开始,ElementTree就在stdlib中,所以它可以在App Engine上使用。

票数 1
EN

Stack Overflow用户

发布于 2010-04-02 22:19:47

如果你的网站访问量很低,你可能会遇到你的应用的启动时间。如果应用程序空闲了几分钟,应用程序引擎就会减速以节省资源。当下一个请求到来时,应用程序必须在处理请求之前启动,这都会添加到您的cpu配额中。如果你搜索appengine新闻组,你会发现它充满了对此的抱怨。

我将superfeedr用于我的站点www.newsfacet.com,我注意到当superfeedr通知我时,我可以在几百毫秒内处理几篇rss文章。如果距离最后一次输入已经有一段时间了,那么这一次可以跳到10秒或11秒,因为它会产生旋转成本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2563568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档