2012-09-05 25 views
12

PythonのFlaskライブラリを使用して、すべてのページの読み込み時間を計算するにはどうすればよいでしょうか?私は違いを計算するために、タイマーの端部を置く、と私はにそれをどのようになるだろうPythonのFlaskで各ページの実行時間を計算する

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

しかし:

私はビューでスタートタイマーを置くことを考えていた

/__ init__.py私のHTMLテンプレートのフッター?

ありがとうございました。

答えて

11

teardown_request機能でそれを入れて:あなたは応答を変更することはできませんteardown_request

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

、あなたが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 
+0

テンプレートからテンプレートを取得するにはどうすればよいですか。すべてのレンダリングが終了した後ではありませんか? – ensnare

+1

ensnare - 時間を計算した後のレンダリングテンプレートは、このようにレンダリング時間を無視しているので良い考えではありませんが、応答に計算時間を追加する方法については私のアップデートをチェックしてください。 – MostafaR

+1

私はbefore_request()関数にg.start = time.time()を入れ、after_request()関数にコードを入れました。しかし、私がそうすると、after_request()はgstartを見ることができません。私はエラーが発生します: '_RequestGlobals'オブジェクトに属性 'start'がありません – ensnare

2

ますまた、ブラウザが動かないとコンテンツ長のヘッダーを更新する必要があります(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 
1

私は静的ピーター・ファーマーの答えを持つファイル、およびリダイレクションの問題点(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 
関連する問題