Flask + Jinja2: come misurare le prestazioni
-
26-10-2019 - |
Domanda
Ho bisogno di confrontare le prestazioni di un'applicazione Flask che usi jinja2.Template.render
contro jinja2.Template.stream
per essere sicuri che non v'è alcuna perdita di prestazioni che utilizzano il flusso di modelli.
Il mio (molto semplice) idea era quella di stampare il timestamp prima e dopo il rendering del modello, ma dal momento che la pagina web viene restituito da una funzione, non sono del tutto sicuro di come implementare questo ...
La mia funzione è:
def index():
"""main function"""
env = Environment(loader=FileSystemLoader(basedir+'templates'))
#I modify the global variables
env.globals['foo'] = 'bar'
env.globals['build_response']=build_response
get_url = request.args.get('to_print', None)
message = "the input was \"%s\"" % (get_url,)
template = env.get_template('body.html')
return Response(template.stream(message=message))
#return template.render(message=message)
E quello che ho bisogno di misura è il tempo trascorso da
return template.render(message=message)
vs
return Response(template.stream(message=message))
grazie!
Soluzione
È necessario guardare l'orologio di sistema prima e dopo la chiamata.
E 'più facile fare questo se non restituire immediatamente la risposta da template.render o template.stream.
IE:
from time import time
def index():
# THE REST OF YOUR CODE GOES HERE
start = time.time()
resp = template.render(message=message)
end = time.time()
processing_time = end - start
# LOG PROCESSING TIME SOMEPLACE
return resp