20

PythonのFlaskライブラリを使用して、ページの読み込みごとの実行時間を計算する良い方法は何ですか?

私はviews/__ init__。pyに開始タイマーを置くことを考えていました:

@app.before_request
def before_request():
  g.start = time.time()

しかし、差を計算するためにタイマーの最後の部分をどこに配置し、それをhtmlテンプレートのフッターにどのように組み込むのでしょうか?

ありがとう。

4

6 に答える 6

16

それをteardown_request機能に入れます:

@app.teardown_request
def teardown_request(exception=None):
    diff = time.time() - g.start
    ...

応答を変更することはできません。teardown_request応答で計算された文字列を使用する場合は、次を使用しますafter_request

@app.after_request
def after_request(response):
    diff = time.time() - g.start
    if (response.response):
        response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff))
    return response
于 2012-09-05T03:08:03.923 に答える
3

また、content-lengthヘッダーを更新する必要があります。そうしないと、ブラウザーが混乱します(Chromeは予測できない結果をもたらすようです)。

@app.after_request
def after_request(response):
    diff = time.time() - g.start
    if app.debug:
        print "Exec time: %s" % str(diff)

    if (response.response):
        response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff))
        response.headers["content-length"] = len(response.response[0])

    return response
于 2012-10-23T15:33:24.177 に答える
1

Peter Farmerの回答で静的ファイルを提供する「壊れたパイプエラー」とリダイレクトの問題(HTTP 301)があったため、提供されたコードが役立つ場合は調整しました。

@app.after_request
def after_request(response):
    diff = int((time.time() - g.start) * 1000)  # to get a time in ms

    if (response.response and response.content_type.startswith("text/html") and response.status_code==200):
        response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff))

    return response
于 2013-03-04T14:55:49.220 に答える