Flask + Jinja2: So messen Sie Performances
-
26-10-2019 - |
Frage
Ich muss die Leistungen einer Flask -Anwendung vergleichen, die verwendet jinja2.Template.render
gegen jinja2.Template.stream
Um sicherzustellen, dass es keinen Verlust von Leistungen unter Verwendung des Streaming von Vorlagen gibt.
Meine (sehr einfache) Idee war es, den Zeitstempel vor und nach der Wiedergabe der Vorlage zu drucken, aber da die Webseite von einer Funktion zurückgegeben wird, bin ich mir nicht ganz sicher, wie ich diese implementieren soll ...
Meine Funktion ist:
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)
Und was ich messen muss, ist die Zeit, die von verbracht wurde
return template.render(message=message)
vs
return Response(template.stream(message=message))
Danke!
Lösung
Sie müssen sich die Systemuhr vor und nach dem Anruf ansehen.
Dies ist einfacher, wenn Sie die Antwort von template.render oder template.stream nicht sofort zurückgeben.
Dh:
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