我知道这并不直接提示我的问题,但id只是我所需要的。
我重申过,xml不是我可以使用的唯一文件类型,所以不是使用xml解析器,而是选择使用json。体积缩小约2.5倍。什么意思是下载时间的减少。我用simplejson
作为我的json库。
我以前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馈送,但大部分的时间单个提要提出的DownloadError#5(超时)。然后,我将截止日期增加到10秒,并开始一次获得5个Feed。
但是,25k提要一次获得5个,导致5k个呼叫。在一个可以每秒产生5个任务的队列中,总的任务时间最后应该是17分钟。
如果XML解析占据了您的任务时间或将您接近30秒的限制,您应该重新考虑您的任务结构。很难回答这个问题,因为它确实是“什么是对特定输入最有效的解析器?”输入未定义的地方。 – msw 2010-07-15 02:37:50
请发布您最终使用的结果,以便下一个人可以从您的研究中受益。另外,你确定这个任务的XML处理阶段真的会成为这些任务的瓶颈吗? – 2010-07-15 19:14:10