データストアにクエリを実行し、クエリによって返された各エンティティに対して何らかの作業を行う必要がある 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)
私はすべてのドキュメントを読み、実装の根性を見ましたが、これらの操作の制限が大きな結果セットに対して何であるかは完全には明らかではありません.