当前位置:  开发笔记 > 编程语言 > 正文

优化Jinja2环境创建

如何解决《优化Jinja2环境创建》经验,为你挑选了1个好方法。

我的应用程序在Google App Engine上运行,由于CPU使用率过高,大多数请求都会不断变为黄色标记.使用分析器我将问题跟踪到创建jinja2.Environment实例的例程.

我正在模块级创建实例:

from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))

由于谷歌AppEngine操作模式(CGI),这个代码可以在每个请求上运行(他们的模块导入缓存似乎缓存模块几秒钟而不是几分钟).

我在考虑将环境实例存储在memcache中,但它似乎不是可选择的.FileSystemLoader实例似乎是可选择的并且可以缓存,但我没有观察到这种方法在CPU使用方面有任何实质性的改进.

任何人都可以建议一种方法来减少创建jinja2.Environment实例的开销?

编辑:下面是探查器输出的(相关)部分.

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()

一个电话,但据我所知(这在我所有基于GAE的应用程序中都是一致的),是整个请求处理周期中最昂贵的.



1> moraes..:

Armin建议将Jinja2模板预编译为python代码,并在生产中使用已编译的模板.所以我为此制作了一个编译器/加载器,现在它渲染了一些复杂的模板13倍,丢掉了所有的解析开销.与链接库中的相关讨论是在这里.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有