感谢来自这里的人们的帮助,我能够获得塔斯马尼亚骆驼拼图工作的代码.然而,它非常慢(我想.我不确定,因为这是我在Python中的第一个程序).在代码底部运行的示例需要很长时间才能在我的机器中解决:
dumrat@dumrat:~/programming/python$ time python camels.py
[['F', 'F', 'F', 'G', 'B', 'B', 'B'], ['F', 'F', 'G', 'F', 'B', 'B', 'B'],
['F', 'F', 'B', 'F', 'G', 'B', 'B'], ['F', 'F', 'B', 'F', 'B', 'G', 'B'],
['F', 'F', 'B', 'G', 'B', 'F', 'B'], ['F', 'G', 'B', 'F', 'B', 'F', 'B'],
['G', 'F', 'B', 'F', 'B', 'F', 'B'], ['B', 'F', 'G', 'F', 'B', 'F', 'B'],
['B', 'F', 'B', 'F', 'G', 'F', 'B'], ['B', 'F', 'B', 'F', 'B', 'F', 'G'],
['B', 'F', 'B', 'F', 'B', …
Run Code Online (Sandbox Code Playgroud) 我的应用程序在Google App Engine上运行,由于CPU使用率过高,大多数请求都会不断变为黄色标记.使用分析器我将问题跟踪到创建jinja2.Environment
实例的例程.
我正在模块级创建实例:
from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))
Run Code Online (Sandbox Code Playgroud)
由于谷歌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()
Run Code Online (Sandbox Code Playgroud)
一个电话,但据我所知(这在我所有基于GAE的应用程序中都是一致的),是整个请求处理周期中最昂贵的.