Appstats を Flask で使う方法

App Engine アプリ用のプロファイラである Appstats は、Django 用ミドルウェアだけでなく、WSGI 用ミドルウェアも提供していました。考えてみれば、webapp フレームワークで使えないと SDK で提供しても意味無いですしね。だから Flask でも使えます。


appstats を Flask で使うためのコードは次の通り。

#!/usr/bin/env python
from google.appengine.ext.webapp import util
from google.appengine.ext.appstats import recording
from flask import Flask


app = Flask(__name__)
# Appstats のミドルウェアを追加
app.wsgi_app = recording.appstats_wsgi_middleware(app.wsgi_app)


@app.route("/")
def index():
    return "Hello world!"


if __name__ == '__main__':
    util.run_wsgi_app(app)

あと、app.yaml を編集して、stats ページの URL を追加します。

application: statstest
version: 1
runtime: python
api_version: 1

handlers:
- url: /stats.*
  script: $PYTHON_LIB/google/appengine/ext/appstats/ui.py

- url: .*
  script: main.py

たったこれだけ。


実際に計測してみた結果がこちら。
f:id:griefworker:20110805153500p:image
アプリ起動直後だけ 1ms かかっていますが、それ以降は 0ms。Flask は内部で werkzeug を使ってリクエストをビューにマッピングしていますが、その部分の速度は気にする必要はなさそうですね。