Mon application s'exécute sur Google App Engine et la plupart des demandes obtiennent constamment un drapeau jaune en raison de l'utilisation élevée du processeur. En utilisant profiler j'ai suivi le problème à la routine de création jinja2.Environment
instance.Optimisation de la création de l'environnement Jinja2
Je crée l'instance au niveau du module:
from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))
En raison du mode de fonctionnement AppEngine Google (CGI), ce code peut être exécuté sur chaque demande (leur cache d'importation du module semble cache modules pour secondes plutôt que pour minutes).
Je pensais à stocker l'instance d'environnement dans memcache, mais il semble ne pas être picklable. FileSystemLoader
instance semble être picklable et peut être mis en cache, mais je n'ai pas observé d'amélioration substantielle de l'utilisation du processeur avec cette approche.
Quelqu'un peut-il suggérer un moyen de réduire le temps de création de l'instance jinja2.Environment
?
Édition: ci-dessous est la partie (pertinente) de la sortie du profileur.
222172 function calls (215262 primitive calls) in 8.695 CPU seconds
ncalls tottime percall cumtime percall filename:lineno(function)
33 1.073 0.033 1.083 0.033 {google3.apphosting.runtime._apphosting_runtime___python__apiproxy.Wait}
438/111 0.944 0.002 2.009 0.018 /base/python_dist/lib/python2.5/sre_parse.py:385(_parse)
4218 0.655 0.000 1.002 0.000 /base/python_dist/lib/python2.5/pickle.py:1166(load_long_binput)
1 0.611 0.611 0.679 0.679 /base/data/home/apps/with-the-flow/1.331879498764931274/jinja2/environment.py:10()
Un appel, mais pour autant je peux voir (et cela se retrouve dans toutes mes applications basées sur GAE), le plus cher dans l'ensemble du cycle de traitement des demandes.
Quelle partie de l'appel de l'environnement provoque la douleur? pouvons-nous voir les informations de profil? –
Merci pour les informations de profil, il ne fait pas vraiment la lumière (à part les 4000 appels à cornichons!). Je pense que je vais devoir voir tout ça. –
Peut-être venez-vous sur #pocoo sur freenode, et nous pouvons discuter à ce sujet? –