ndbを使用して、アプリケーションリクエストごとにデータをログに記録するプロファイリングモデルを作成しています。各リクエストはndb.put_asyncによるndbリクエストを呼び出してデータをログに記録しますが、クライアントは結果を気にしません。本質的に、私はアプリケーション要求がプロファイリングのために統計データを保存するのを待つことを望まない。
しかし、公式資料からの説明に戸惑いました。ndbリクエストが終了する前にアプリケーションリクエストが終了した場合でも、ndbリクエストは確実に終了しますか?ドキュメントは次のことを示しています
リクエストハンドラーの存在が早すぎると、プットが発生しない可能性があります
これはどのような基準で起こりますか?これは、ユーザーが結果を気にするかどうかに関係なく、ndb要求が実行されることを確認するためだけに、とにかくfuture.get_resultを呼び出す必要があることを意味しますか?
元のドキュメント(https://developers.google.com/appengine/docs/python/ndb/async)には次のように書かれています。
この例では、future.get_resultを呼び出すのは少しばかげています。アプリケーションがNDBからの結果を使用することはありません。そのコードは、NDBプットが終了する前にリクエストハンドラーが終了しないようにするためのものです。リクエストハンドラの終了が早すぎると、プットが発生しない可能性があります。便宜上、リクエストハンドラを@ndb.toplevelで装飾できます。これは、非同期要求が終了するまで終了しないようにハンドラーに指示します。これにより、リクエストを送信し、結果を気にする必要がなくなります。