Вычислить время выполнения для каждой страницы в Python Flask
Какой хороший способ рассчитать время выполнения для каждой загрузки страницы с использованием библиотеки флагов Python?
Я думал о включении таймера запуска в представлениях /__ init __. py:
@app.before_request
def before_request():
g.start = time.time()
Но где бы я поставил конечную часть таймера, чтобы вычислить разницу, и как бы получить ее в нижнем колонтитуле моего html-шаблона?
Спасибо.
Ответы
Ответ 1
Поместите его в функцию 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
Ответ 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
Ответ 3
У меня была "ошибка обрыва трубы", обслуживающая статические файлы с ответом Питера Фармера, и проблемы с перенаправлением (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