gpt4 book ai didi

python - 优化 Jinja2 环境创建

转载 作者:太空狗 更新时间:2023-10-29 20:13:17 25 4
gpt4 key购买 nike

我的应用程序在 Google App Engine 上运行,由于 CPU 使用率高,大多数请求不断收到黄旗。使用探查器,我将问题追溯到创建 jinja2.Environment 实例的例程。

我在模块级别创建实例:

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

由于 Google AppEngine 操作模式 (CGI),此代码可以在每次请求时运行(它们的模块导入缓存似乎将模块缓存几秒钟而不是几分钟)。

我正在考虑将环境实例存储在 memcache 中,但它似乎不可 picklable。 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 的应用程序中都是一致的),是整个请求处理周期中最昂贵的一次。

最佳答案

Armin 建议将 Jinja2 模板预编译为 python 代码,并在生产中使用编译后的模板。所以我为此制作了一个编译器/加载器,它现在渲染一些复杂模板的速度提高了 13 倍,从而消除了所有 解析开销。与存储库链接相关的讨论是 here .

关于python - 优化 Jinja2 环境创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com