Python 将ndb.tasklet与memcache读取相结合

Python 将ndb.tasklet与memcache读取相结合,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,假设我希望读取以下对象结构,并希望尽可能多地并行读取: root_object --> ShardCounter | -> SubObject1 (1..N) | -> SubObject2 (1..N) --> ShardCounter |

假设我希望读取以下对象结构,并希望尽可能多地并行读取:

root_object --> ShardCounter
            |
             -> SubObject1 (1..N)
            |
             -> SubObject2 (1..N) --> ShardCounter
                                  |
                                   -> SubObject3 (1..N)
1) 与memcache和/或store交互以从Tasklet中获取ShardCounter是否有意义?据我所知,memcache没有一个
get_async
,所以我有点不确定这是否能很好地并行化

2) 在为
子对象2
生成结果的小任务中,我是使用
iter.has\u next\u async()
模式,还是调用
fecth\u async().map(…)
来检索
子对象3
,或者完全不同的东西(例如,另一个小任务)


感谢您的指点。

尽管memcache的异步函数没有在顶层定义,但客户机类具有异步函数,如文档所述,可以与NDB和Tasklet一起使用。不过,NDB无法将多个异步get操作组合到一个multi-get中,因此根据您所做的工作,使用
get\u multi
可能更有效。编辑:NDB确实有一个Memcache接口-有关详细信息,请参阅Guido的回答


对于你的第二个问题,你必须详细说明一下你对结果做了什么,为什么,以及你认为备选方案是什么。如果您只需要获取所有异步结果,那么只需在一条语句中生成所有结果。

NDB在上下文对象上有自动批处理异步memcache API。瞧。

谢谢尼克,你帮了大忙!