私はGoogleクラウドNDB Asyncの例のチュートリアルを行ってきました
https://cloud.google.com/appengine/docs/standard/python/ndb/async
WSGIApplication 全体を ndb.toplevel として指定できます。これにより、WSGIApplication の各ハンドラーがすべての非同期要求を待ってから戻るようになります。(すべての WSGIApplication のハンドラを「トップレベル」にするわけではありません。)
app = ndb.toplevel(webapp2.WSGIApplication([('/', MyRequestHandler)]))
これと同じ機能は Flask と互換性がありますか? たとえば、私のコード
app = Flask(__name__)
app.config.update(DEBUG = not SERVER_ISPRODUCTION)
app = ndb.toplevel(app)
...
@app.route('/test')
def testBackfill():
エラーが発生する
Traceback (most recent call last):
File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
@app.route('/test')
AttributeError: 'function' object has no attribute 'route'
このエラーは、トップレベルをリクエスト ハンドラに直接戻すと消えます。フラスコがこの機能で動作しないか、トップレベルの使用方法に問題があると感じています。私の意図は、アプリケーション内の各リクエスト ハンドラーが、すべての非同期 Google DataStore 呼び出しが終了するまで待機してから終了することです (リクエスト ハンドラー内で yield ステートメントとタスクレットを使用しています)。