で装飾されたメソッドの行番号が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()
。これは、一連の他のタスクレットを順番に呼び出すタスクレットです。ただし、これらのタスクレットは appstats には表示されず、ndb
内部のみが表示されます。
ndb
これらのデコレータがどのように正確に実行されているかはわかりませんがpdb
、そのうちの 1 つにトレースを入れてテスト スイートを実行すると、スタック フレームをpdb
タスクレットに入れた行までずっと見ることができるので、 appstats にそれがない理由がわかりません。
一部のリクエストは大量の RPC 呼び出しを引き起こしますが、appstats の最初のタスクレットを過ぎて追跡できないため、アプリのどの部分がそれらを行っているかを特定する方法がわかりません。
微調整が必要なものはありappengine_config
ますか?