代码之家  ›  专栏  ›  技术社区  ›  zgoda

优化金佳2号环境创造

  •  9
  • zgoda  · 技术社区  · 17 年前

    我的应用程序运行在Google App Engine上,由于CPU使用率高,大多数请求都会不断收到黄色标志。我使用profiler跟踪问题,一直到创建 jinja2.Environment 例子

    我正在模块级创建实例:

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

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

    FileSystemLoader 实例似乎是可拾取的,并且可以缓存,但我并没有观察到这种方法在CPU使用方面有任何实质性的改进。

    任何人都可以提出一种减少创建的开销的方法 金甲2.环境 例子

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

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

    3 回复  |  直到 17 年前
        1
  •  10
  •   moraes    16 年前

    Armin建议将Jinja2模板预编译为python代码,并在生产中使用编译后的模板。因此,我为此制作了一个编译器/加载器,现在它可以将一些复杂模板的渲染速度提高13倍,并将其丢弃 全部的 here

        2
  •  4
  •   Community Mohan Dere    8 年前

    好了,各位,这就是我今天在#pocoo上看到的:

    [20:59]zgoda:您好,我想知道我是否可以优化我的jinja2环境创建过程,问题-> Optimizing Jinja2 Environment creation

    [21:00]zgoda:我有来自“冷”应用程序的分析器输出-> http://paste.pocoo.org/show/107009/

    [21:01]zgoda:对于“热”,则为-gt; http://paste.pocoo.org/show/107014/

    [21:02]zgoda:我想知道我是否可以降低为“冷”请求创建环境的CPU成本

    [21:05]mitsuhiko:zgoda:将环境创建放在导入的模块中

    [21:05]光之子:就像

    [21:05]mitsuhiko:来自yourapplication.utils导入环境

    zgoda:它已经在那里了

    [21:06]光之子:嗯

    [21:06]mitsuhiko:我认为问题在于每次访问都会重新编译模板

    [21:06]mitsuhiko:不幸的是,gae有限,我不知道目前我能做的还有多少

    [21:07]zgoda:我试过使用jinja bytecache,但它在prod上不起作用(它在开发服务器上)

    [21:08]光之子:阿彭金没有元帅

    [21:12]zgoda:光之子:谢谢

    看起来Armin已经意识到AppEngine上字节码缓存的问题,并计划改进Jinja2以允许在GAE上进行缓存。我希望随着时间的推移情况会好转。

        3
  •  1
  •   bustrofedon    17 年前

    据此, google recipe 您可以使用memcache来缓存字节码。还可以缓存模板文件内容本身。一模一样