いくつPOST
かのタスクレットを呼び出すメソッドがあります。これらのタスクレットにはyieldがありx.put_async()
、私のコードにもいくつかあります。したがって、すべての非同期処理が完了する前に戻りたくありません。だから私はすべてのタスクレットを装飾しました。これは単なる小さな関数であり、@ndb.tasklet
. また、私のPOST
方法の上に、私は持っています:
@ndb.toplevel
def post(self):
ただし、ドキュメントには次のように記載されています。
しかし、ハンドラ メソッドが yield を使用する場合、そのメソッドは別のデコレータ @ndb.synctasklet でラップする必要があります。そうしないと、yield で実行が停止し、終了しません。
実際、私の方法には収量があります。すでに @ndb.tasklet にラップされています。これを @ndb.synctasklet に置き換えますか、それとも両方を使用しますか?
また、いくつかの関連性があるこのスレッドを参照してください。私も、リクエストが出力なしで返されるが、再現できないという問題に気付きました。一定の使用で15分ごとに発生します。私は持っていましたが、今はメインのメソッドにapp = ndb.toplevel(webapp2.WSGIApplication([..])
追加しましたが、問題は解決しません。@ndb.toplevel
POST
@ndb.tasklet
もあるメソッドの上に置くべきput_async()
ですか?(安全のためにすべてのメソッドの上に置く必要がありますか?これの欠点は何ですか?)