我的GAE应用程序从第三方站点检索JSON数据;给定一个表示要下载的项目的ID,这个站点上的项目数据被组织成多个页面,因此我的代码必须逐页下载数据块,直到检索到最后一个可用页面的数据为止。
我的简化代码如下:
class FetchData(webapp.RequestHandler):
def get(self):
...
data_list = []
page = 1
while True:
fetched_data= urlfetch.fetch('http://www.foo.com/getdata?id=xxx&result=JSON&page=%s' % page)
data_chunk = fetched_data["data"]
data_list = data_list + data_chunk
if len(data_list) == int(fetched_data["total_pages"]):
break
else:
page = page +1
...
doRender('dataview.htm',{'data_list':data_list} )
这个
data_list
结果是一个有序的列表,其中第一个项目具有第1页的数据,最后一个项目具有最新页面的数据;此
数据列表
一旦检索到,将在视图中呈现。
这种方法可以工作99%,但有时,由于
30秒
谷歌应用引擎的限制,对有很多页面的项目我感到恐惧
DeadlineExceededError
.
我想知道是否使用
TaskQueue
γ
Deferred
γ
AsyncUrlfetch
我可以在某种程度上改进这种并行化算法。