使用Python的Flask庫計算每個頁面加載的執行時間的好方法是什麼?計算Python Flask中每個頁面的執行時間
我想將啓動計時器的意見/ __ init__.py:
@app.before_request
def before_request():
g.start = time.time()
但是,在我把定時器的端部來計算的區別,我怎麼會讓它進入我的html模板的頁腳?
謝謝。
使用Python的Flask庫計算每個頁面加載的執行時間的好方法是什麼?計算Python Flask中每個頁面的執行時間
我想將啓動計時器的意見/ __ init__.py:
@app.before_request
def before_request():
g.start = time.time()
但是,在我把定時器的端部來計算的區別,我怎麼會讓它進入我的html模板的頁腳?
謝謝。
放入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
你還需要更新內容長度標題,否則瀏覽器會變得不安(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
我不得不「斷管的錯誤」的服務與彼得農民的回答靜態文件和問題重定向(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
如何從那裏將它從我的模板中取出?不是所有的渲染都完成了嗎? – ensnare
ensnare - 在計算時間之後呈現模板並不是一個好主意,因爲您正在以這種方式忽略呈現時間,但請檢查我的更新以瞭解如何將計算出的時間添加到響應中。 – MostafaR
我把g.start = time.time()放在了我的before_request()函數中,而你的代碼放在了after_request()函數中。但是當我這樣做時,after_request()不能看到g.start。我得到錯誤:'_RequestGlobals'對象沒有屬性'開始' – ensnare