为什么用@ndb.tasklet修饰的方法中的行号在appstats中不存在
在我们的应用程序中,我们有一个约定,既包括同步版本的函数,也包括异步版本的函数,类似于:
def do_something(self, param=None):
return self.do_something_async(param=param).get_result()
@ndb.tasklet
def do_something_async(self, param=None):
stuff = yield self.do_something_else_async(stuff=param)
# ...
raise ndb.Return(stuff)…但是,即使在将appegnine_config.appstats_MAX_STACK设置为很大的值并清空appengine_config.appstats_RE_STACK_SKIP之后,在第一次调用some_tasklet.get_result()时,appstats中的报告仍然会留下我的应用程序代码。
这里有一个来自appstats的例子:

learn.get_list_of_cards_to_learn()中的扩展堆栈帧只返回self.get_list_of_cards_to_learn_async().get_result(),这是一个微线程,它反过来调用一系列其他微线程。然而,这些微线程在appstats中都不可见,我所看到的只有ndb内部。
其中一些请求会导致大量的RPC调用,但我不确定如何确定应用程序的哪个部分发出了这些请求,因为我无法通过appstats中的第一个tasklet来跟踪它。
是否需要在appengine_config中进行一些微调
发布于 2013-01-14 00:42:06
这与NDB的调度程序管理微线程的方式有关。对此你无能为力。
https://stackoverflow.com/questions/14275660
复制相似问题