优化 Jinja2 环境创建

2023-11-23

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

我正在模块级别创建实例:

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

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

我正在考虑将环境实例存储在内存缓存中,但它似乎不可picklable。FileSystemLoader实例似乎是可挑选的并且可以缓存,但我没有观察到这种方法对 CPU 使用率有任何实质性的改善。

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

Edit:下面是探查器输出的(相关)部分。

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 倍,抛弃了all解析开销。与存储库链接的相关讨论是here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化 Jinja2 环境创建 的相关文章

随机推荐

  • 在应用程序计费 v3 中使用 IabHelper 出现 IllegalArgumentException

    我已经在我的应用程序中实施应用程序计费 v3 大约一周了 我使用了很多android的示例代码来简化集成 我经常记录一次崩溃 但似乎无法重现 Exception Type java lang RuntimeException Reason
  • 如何在 JavaScript Azure Functions 中共享代码?

    如何在 Azure 函数应用中的文件之间共享代码 例如 Mongo 架构定义 我需要这样做 因为我的函数需要访问共享的 mongo 架构和模型 例如这个基本示例 var blogPostSchema new mongoose Schema
  • 如何使用 MongoDB 递归查询树结构?

    例如树结构为 id 1 childrenIdList 2 3 id 2 childrenIdList 4 5 id 3 childrenIdList id 4 childrenIdList 6 7 id 5 childrenIdList i
  • 如何避免看似自动引用“父”命名空间?

    我相信我对命名空间层次结构有一个根本性的误解 导致了与这个问题几乎相反的问题 vb net 系统命名空间与同级命名空间冲突 我有两个 cs 文件 其中包含以下内容 File 1 namespace Parent Math public cl
  • 不同参数的多态性

    是否有可能使用具有不同参数的相同名称的函数来实现多态性 例如 我希望这三个功能合二为一 virtual bool isValid1 const std string 0 virtual bool isValid2 const uint32
  • 初始化 char 指针 C++ [重复]

    这个问题在这里已经有答案了 这怎么可能 const char cp Hello world 我目前正在阅读 C 入门书 我发现了这个例子 我是一个非常初学者 为什么可以用字符串初始化 char 指针 我真的无法理解这个例子 据我所知 指针只
  • 将窗户控制器插座连接到窗户

    我正在尝试在 XCode 4 中创建一个简单的模式对话框 我已经创建了 xib 创建了 NSWindowController 派生类 并使其成为 xib 的文件所有者中的类 我遇到问题的部分是物理连接窗口插座 如问题答案中所述 如何为从 N
  • 是否有可以将正则表达式存储为值的数据库?

    我正在寻找一个可以将正则表达式存储为值的数据库 例如 像这样的东西 name gt Tim count gt 3 expression gt t name gt Rob count gt 4 expression gt a d name g
  • JS中如何检查多维数组项是否设置?

    JS中如何检查多维数组项是否设置 w 1 2 new Array w 1 2 1 new Array w 1 2 1 1 10 w 1 2 1 2 20 w 1 2 1 4 30 如何检查是否w 1 2 1 3 is set 解决方案与if
  • 读取环境变量运行速度慢?

    如果使用环境变量比使用普通变量 在脚本语言中 慢是正确的 那么它是如何解释的 检索环境变量的值将引发系统调用 普通变量内置于您运行的语言中 位于相同的地址空间中 甚至可能位于 CPU 寄存器中 取决于语言及其执行方式 只是获取数据的路程更长
  • iOS 应用程序验证错误:缺少 plist 密钥 CFBundleShortVersionString

    我用 SpriteBuilder 和 cocos2d 构建了一个 iOS 游戏 当我尝试将其提交到 AppStore 时 出现以下错误 错误 ITMS 9000 缺少 plist 密钥 Info plist 文件缺少所需的密钥 CFBund
  • Python 中返回 NoneType 的函数? [复制]

    这个问题在这里已经有答案了 在从事 CS1 的 Python 项目时 我遇到了一个我和我的室友都无法解决的奇怪问题 代码的一般范围是使用数字填充具有一定大小的形状的 0 网格来填充空间 并且我们必须一路检查以确保我们没有将形状放置在已经有形
  • JQuery JSTree - 添加工具提示

    有没有办法添加一个Tooltip to a JSTree节点 我想当用户将鼠标悬停在元素上时显示额外的信息 我对 JQuery 非常了解 所以对此可能有一个明显的答案 编辑 感谢下面的 zzzz 我能够弹出一个简单的悬停框 尽管将树的div
  • 如何检查div是否有id?

    div div class ui droppable one div div class ui droppable two div div class ui droppable three div div class ui droppabl
  • 创建 javadoc 时发生致命错误(无法找到包 java.lang)

    我尝试在 Linux 下使用 Eclipse Kepler 在我的 java 项目中运行 javadoc 但收到此错误 Constructing Javadoc information com sun tools javac util Fa
  • 我应该尽可能使用并行流吗?

    使用 Java 8 和 lambda 可以轻松地将集合作为流进行迭代 并且使用并行流也同样容易 两个例子来自the docs 第二个使用并行流 myShapesCollection stream filter e gt e getColor
  • 在 Sphinx 文档中保留包装/修饰的 Python 函数的默认参数

    我该如何更换 args and kwargs带有装饰函数文档中的真实签名 假设我有以下装饰器和装饰函数 import functools def mywrapper func functools wraps func def new fun
  • 为什么将条件应用于 IAM 策略中的 ec2:DescribeInstances 会失败?

    当尝试配置可以使用策略列出哪些实例时 我注意到以下问题 当条件未实现时 所有实例都是可见的 当任何条件被实现时 什么都看不到 包含有条件的示例策略 Version 2012 10 17 Statement Sid Stmt146123588
  • 访问 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

    谁能告诉我为什么我无法访问注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Installer UserData 如果我查询GetSubKeysNames o
  • 优化 Jinja2 环境创建

    我的应用程序在 Google App Engine 上运行 由于 CPU 使用率高 大多数请求不断收到黄色标记 使用探查器 我将问题追溯到创建的例程jinja2 Environment实例 我正在模块级别创建实例 from jinja2 i