0

私は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 ステートメントとタスクレットを使用しています)。

4

1 に答える 1