GAE数据库并行查询工具:asynctools

标签:Google App Engine, Python

刚才在GAE官方博客看到《Recent Happenings: TickTock, parallel queries, DryDrop, and more》一文,其中提到的并行查询让我很感兴趣,于是研究了一下。

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。

1条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?