0

我目前正在 Symfony2 框架中开发一个网站,并且我编写了一个每 5 分钟运行一次的命令,它需要读取大量的 RSS 新闻提要,从中获取新项目并将它们放入我们的数据库中。

现在,该命令需要大约 45 秒才能运行,在这 45 秒内,它还需要大约 50% 到 90% 的 CPU,尽管我已经对其进行了很多优化。

所以我的问题是,用其他东西(例如 python)重写相同的命令是个好主意吗?可用于 python 的 RSS/Atom 库是否比可用于 PHP 的库更快、更优化?

在此先感谢,雅普

4

3 回答 3

2

您可以使用 lxml 解析原始 XML,其中用户是 libxml C iibrary 的基础:

http://lxml.de/parsing.html

因为解析是使用本机代码完成的,所以速度很快。

有人已经在做:

使用 lxml 解析 RSS 时出现编码错误

另一方面,如果瓶颈不是 XML 解析,而是下载数据并对其进行整理,那么瓶颈就在其他地方。

于 2012-07-08T09:47:44.783 回答
0

通过在每次提要迭代结束时添加一个 usleep() 函数来解决这个问题。这大大降低了 CPU 和内存消耗。过去这个过程大约需要 20 分钟,现在只需要大约 5 分钟!

于 2013-03-12T12:44:26.697 回答
0

您可以尝试在解析它们之前先检查提要的缓存标头。
通过这种方式,您可以节省可能大量提要的昂贵的解析操作。

在您的数据库中为源存储一个 last_updated 日期,然后检查可能的缓存标头。有几个,所以看看什么最适合或服务最多或检查所有。
标头可以是:

  • 过期
  • 最后修改
  • 缓存控制
  • 编译指示
  • 电子标签

但请注意:您必须信任您的提要来源。
并非每个提要都提供此类标题或正确提供它们。
但我相信他们中的很多人都这样做。

于 2012-07-09T10:17:20.263 回答