Mi aplicación se ejecuta en Google App Engine y la mayoría de las solicitudes recibe constantemente una bandera amarilla debido al alto uso de la CPU. Utilizando Profiler rastreé el problema hasta la rutina de crear la instancia jinja2.Environment
.Optimización de la creación de entorno Jinja2
estoy creando la instancia a nivel de módulo:
from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))
Debido al modo de funcionamiento de App Engine de Google (CGI), este código se puede ejecutar todos y cada petición (su caché importación de módulo parece caché módulos por segundos en lugar de por minutos).
Estaba pensando en almacenar la instancia de entorno en Memcache, pero parece que no es seleccionable. FileSystemLoader
instancia parece ser seleccionable y se puede almacenar en caché, pero no observé ninguna mejora sustancial en el uso de la CPU con este enfoque.
¿Alguien puede sugerir una manera de disminuir la sobrecarga de la creación de la instancia jinja2.Environment
?
Editar: a continuación es parte (relevante) de la salida del generador de perfiles.
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()
Una llamada, pero por lo que puedo ver (y esto es consistente a través de todos mis aplicaciones basadas en GAE), el más caro de todo el ciclo de procesamiento de la solicitud.
¿Qué parte de la llamada de Medio Ambiente está causando el dolor? podemos ver la información del perfil? –
Gracias por la información de perfil, realmente no arroja ninguna luz sobre ella (¡aparte de las 4000 llamadas a pickle!). Creo que tendré que ver todo. –
Tal vez venga a #pocoo en freenode, ¿y podemos conversar al respecto? –