我想我们都知道this page,但提供的基准是两年多前的。所以,我想知道你是否可以指出最好的xml解析器。因为我只需要一个xml解析器,对我来说更重要的是速度超过其他一切。 我的目标是处理一些大小为4kb的xml feed(大约25k)(这将是一项日常任务)。您可能知道,我受到30秒请求超时的限制。那么,我可以使用的最佳解析器(仅限Python)是什么?
谢谢你的赞美诗。
编辑01:
@Peter Recore 生病。我现在正在编写一些代码,并计划在不久的将来进行一些分析。关于你的问题,答案是否定的。与下载实际的xml提要相比,处理只需要一点时间。但是,我不能增加谷歌的带宽,因此我现在只能关注这一点。
我唯一的问题是我需要尽可能快地完成这项工作,因为我的目标是获取网站状态的快照。并且,由于互联网是实时的,人们不断添加和更改它的数据,我需要最快的方法,因为在“下载和处理”时间跨度期间任何数据插入实际上都会弄乱我的统计分析。
我以前是在自己的电脑上完成这个过程,然后这个过程耗时24分钟,但现在网站的信息量增加了12倍。
答案 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分钟。