我有一个 AppEngine cron 作业来查询数据存储,然后需要对查询返回的每个实体做一些工作。查询返回的实体数量有时会很大(>1000)。
我的目标是最大限度地提高并发性并保持较低的内存使用率 - 由于预期的结果数量很大,它们可能不适合内存。
鉴于大量的结果,我是否应该像这样迭代它们:
qry = Model.query()
qit = qry.iter()
while (yield qit.has_next_async()):
entity = qit.next()
# Do something with entity
...或者使用更快的 map_async() 对任意大的结果集进行操作是否安全?
@ndb.tasklet
def callback(entity):
# Do something with entity
qry = Model.query()
yield qry.map_async(callback)
我已经阅读了所有文档,甚至查看了实现的核心内容,但并不完全清楚这些操作对于大型结果集的限制是什么。