为什么appstats中没有使用@ndb.tasklet
修饰的方法中的行号?
在我们的应用程序中,我们有一个约定,包括同步和异步版本的函数,如:
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
,appstats中的报告仍会在第一次调用some_tasklet.get_result()
时保留我的应用程序代码。
这是appstats的一个例子:
learn.get_list_of_cards_to_learn()
处的扩展堆栈帧只返回self.get_list_of_cards_to_learn_async().get_result()
,这是一个tasklet,后者又调用了许多其他tasklet。但是这些tasklet在appstats中都不可见,我看到的只是ndb
内部。
我不确定ndb
究竟是如何执行这些装饰器的,但是如果我在其中一个装入pdb
跟踪并运行我的测试套件,我可以看到堆栈帧一路走来直到我放在tasklet中的pdb
行,所以我不明白为什么appstats中没有。
有些请求导致大量的RPC调用,但我不知道如何弄清楚我的应用程序的哪个部分正在制作它们,因为我无法通过appstats中的第一个tasklet跟踪它。
我可能需要在appengine_config
中微调一下吗?
答案 0 :(得分:2)
这与NDB调度程序管理tasklet的方式有关。你无能为力。