0

高效地获取大量的实体在App Engine,您可以查询实体是这样的:GAE/P:通过关键

for x in MyEntity.query().iter(): 
    x.do_something() 

当你这样做时,NDB代码将分批有效地获取实体护理尽量减少往返数据存储的次数。

在我的情况下,我想要做同样高效的批处理,但我已经有一个键列表,所以我不妨使用它们来避免较慢的查询。我想这样做:

for x in iter_entities(key_list): 
    x.do_something() 

凡功能iter_entities()将分批因为我需要他们获取实体。自己写这篇文章并不难,但我可能做不到Google的伟大人物那么好,如果我不需要的话,为什么要重新开始!

有没有办法编写一个建立在ndb迭代器之上的函数iter_entities()

回答

2

如果您使用您的个人,实体处理异步任务蕾,然后NDB会照顾配料得到,这样的事情应该工作:

@ndb.tasklet 
def do_something(key): 
    x = yield key.get_async() 
    x.do_something() 

futs = [] 
for key in key_list: 
    futs.append(do_something(key)) 

ndb.Future.wait_all(futs) 
+0

谢谢,这看起来很完美。自动配料很棒。在我的'do_something()'中,我将用'taskqueue.Queue()。add()'排队。你知道自动分批还能批量吗? –