假设我想阅读以下对象结构,并希望尽可能并行化读取:
root_object --> ShardCounter
|
-> SubObject1 (1..N)
|
-> SubObject2 (1..N) --> ShardCounter
|
-> SubObject3 (1..N)
1)与memcache和/或商店交互以从tasklets中获取ShardCounters是否有意义?据我所知,memcache没有get_async
,所以我不确定这是否会很好地并行化?
2)在生成SubObject2
结果的tasklet中,我会使用iter.has_next_async()
模式,还是会调用fecth_async().map(...)
来检索SubObject3
,或者完全不同的东西(例如另一个tasklet)?
感谢您的任何指示。
答案 0 :(得分:7)
NDB 在Context对象上具有自动批处理异步memcache apis。请参阅https://developers.google.com/appengine/docs/python/ndb/contextclass。
答案 1 :(得分:3)
尽管在顶层没有定义memcache的异步函数,但Client类具有异步函数,如文档here所示,您可以将其与NDB和tasklet一起使用。但是,NDB将无法将多个异步获取操作组合到一个多重获取中,因此根据您正在执行的操作,执行get_multi
可能更有效。编辑:NDB确实有一个Memcache界面 - 有关详细信息,请参阅Guido的答案。
对于你的第二个问题,你必须详细说明你正在做什么的结果和原因,以及你看到的替代方案。如果你只需要获取所有异步结果,你可以在一个语句中完成它们。