为什么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。然而,这些小任务在 appstats 中都不可见,我所看到的只是ndb
内部。
我不确定ndb
这些装饰器到底是如何执行的,但是如果我pdb
在其中一个中添加跟踪并运行我的测试套件,我可以看到堆栈帧一直到pdb
我放入 tasklet 的行,所以我不'不明白为什么appstats中没有。
一些请求会导致大量的 RPC 调用,但我不确定如何确定我的应用程序的哪个部分正在生成它们,因为我无法通过 appstats 中的第一个 tasklet 跟踪它。
有什么可能我需要微调的appengine_config
吗?