私のアプリケーションはGoogleAppEngineで実行されており、CPU使用率が高いため、ほとんどのリクエストに常に黄色のフラグが表示されます。jinja2.Environment
プロファイラーを使用して、インスタンスを作成するルーチンまで問題を追跡しました。
モジュールレベルでインスタンスを作成しています:
from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))
Google 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()
1回の呼び出しですが、私が見る限り(これは、すべてのGAEベースのアプリで一貫しています)、リクエスト処理サイクル全体で最もコストがかかります。