GAE数据库并行查询工具:asynctools
2009 8 20 12:49 AM 2161次查看
分类:Google App Engine 标签:Google App Engine, Python
asynctools这个库用起来很方便,主要代码和一般的查询差不多,只不过需要用QueryTask封装一下,再托管给一个AsyncMultiTask对象。值得一提的是,asynctools还做了缓存处理(使用CachedMultiTask)和超时限制。
下面是asynctools首页的例子:
# set up the async queries
runner = AsyncMultiTask()
for fbuid in facebook_user_ids:
query = db.GqlQuery("SELECT __key__ FROM Account WHERE facebook_id = :1", uid)
runner.append(QueryTask(query, limit=1, client_state=fbuid))
# kick off the work
runner.run()
# peel out the results
for task in runner:
task_result = task.get_result() # will raise any exception that occurred for the given query
print '%s: %s' % (task.client_state, task_result[0])
此外,这个库还可以并行执行urlfetch,不过GAE已经提供了异步API了,也就用不到这个了。《asynctools – A Tale of Two Queries》这篇文章也介绍了它,还附了张截图,3秒的响应时间使用了30秒的CPU时间。
不过我觉得似乎没多神奇,因为做一般的查询测试,查询100个实体响应时间用了60ms,CPU时间1400ms,比例似乎比并行查询更大…
顺带一提,这个库并没提供下载,需要去svn查看或check out。
向下滚动可载入更多评论,或者点这里禁止自动加载。