私のアプリケーションは、Google App Engineの上で実行されていて、要求のほとんどは、常にCPUの使用率が高いためにイエローフラッグを取得します。プロファイラを使用して、私はjinja2.Environment
インスタンスを作成するためのルーチンまで問題を追跡しました。最適化Jinja2の環境の作成
私はモジュールレベルでインスタンスを作成しています:
from jinja2 import Environment, FileSystemLoader
jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRS))
によりGoogleのAppEngineの動作モード(CGI)に、このコードはそれぞれ、すべての要求に応じて実行することができます(そのモジュールのインポートキャッシュはキャッシュするように思えます数分ではなく数秒間)。
私はmemcacheの環境インスタンスを格納考えていたが、ピクルないようです。 FileSystemLoader
インスタンスがpickle化可能なように思われ、キャッシュすることができますが、私はこのアプローチで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ベースのアプリケーション間で一貫性のある)、全体のリクエスト処理サイクルの中で最も高価。
環境のどの部分が痛みを引き起こしていますか?プロフィール情報を見ることはできますか? –
プロファイル情報をありがとう、それは本当に(ピクルに4000コールから離れて)それについての光を出すことはありません!私はすべてを見なければならないと思う。 –
おそらくfreenodeで#pocooに来て、私たちはそれについてチャットできますか? –