对于GAE(Python版本),性能最佳的xml解析是什么?

时间:2010-07-15 02:27:47

标签: python xml google-app-engine parsing

我想我们都知道this page,但提供的基准是两年多前的。所以,我想知道你是否可以指出最好的xml解析器。因为我只需要一个xml解析器,对我来说更重要的是速度超过其他一切。 我的目标是处理一些大小为4kb的xml feed(大约25k)(这将是一项日常任务)。您可能知道,我受到30秒请求超时的限制。那么,我可以使用的最佳解析器(仅限Python)是什么?

谢谢你的赞美诗。

编辑01:

@Peter Recore 生病。我现在正在编写一些代码,并计划在不久的将来进行一些分析。关于你的问题,答案是否定的。与下载实际的xml提要相比,处理只需要一点时间。但是,我不能增加谷歌的带宽,因此我现在只能关注这一点。

我唯一的问题是我需要尽可能快地完成这项工作,因为我的目标是获取网站状态的快照。并且,由于互联网是实时的,人们不断添加和更改它的数据,我需要最快的方法,因为在“下载和处理”时间跨度期间任何数据插入实际上都会弄乱我的统计分析。

我以前是在自己的电脑上完成这个过程,然后这个过程耗时24分钟,但现在网站的信息量增加了12倍。

1 个答案:

答案 0 :(得分:1)

我知道这不会直接影响我的问题,但是id会做我刚才需要的。

我认为xml不是我可以使用的唯一文件类型,因此我选择使用json而不是使用xml解析器。尺寸缩小约2.5倍。什么意味着减少下载时间。我用simplejson作为我的json libray。

我使用from google.appengine.api import urlfetch并行获取json提要:

class GetEntityJSON(webapp.RequestHandler):
  def post(self):
    url = 'http://url.that.generates.the.feeds/'
    if self.request.get('idList'):
      idList = self.request.get('idList').split(',')

      try:
        asyncRequests = self._asyncFetch([url + id + '.json' for id in idList])
      except urlfetch.DownloadError:
        # Dealed with time out errors (#5) as these were very frequent

      for result in asyncRequests:
        if result.status_code == 200:
          entityJSON = simplejson.loads(result.content)
          # Filled a database entity with some json info. It goes like this:
          # entity= Entity(
          # name = entityJSON['name'],
          # dateOfBirth = entityJSON['date_of_birth']
          # ).put()

    self.redirect('/')

  def _asyncFetch(self, urlList):
    rpcs = []
    for url in urlList:
      rpc = urlfetch.create_rpc(deadline = 10)
      urlfetch.make_fetch_call(rpc, url)
      rpcs.append(rpc)
    return [rpc.get_result() for rpc in rpcs]

我尝试一次获取10个Feed,但大多数情况下,单个Feed会引发DownloadError#5(超时)。然后,我将截止日期增加到10秒,并开始一次获得5个Feed。

但是,25k饲料一次获得5个,导致5k电话。在一个可以每秒产生5个任务的队列中,总的任务时间最终应该是17分钟。