我的 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 页的数据,最后一项具有最新一页的数据;this data_list
,一旦检索到,就会在视图中呈现。
这种方法在 99% 的情况下都有效,但有时,由于 Google App Engine 施加的30 秒限制,对于包含许多页面的项目,我会感到害怕DeadlineExceededError
。我想知道是否使用TaskQueue | 延期| AsyncUrlfetch我可以改进这个算法,以某种方式并行化 N 个 urlfetch 调用。