2009-08-05 9 views
1

私は最近、django appengineパッチを使用するアプリケーションをアップロードしました。現在、2分ごとに実行されるcronジョブがあります。ワーカーURLを呼び出すたびに、それはリソースのかなりを消費appengine/pythonを使用しているときにzipimportedモジュールのインポートがメモリにキャッシュされている時間はどれくらいですか?

呼び出すたびに、それはすべてのライブラリジャンゴなどの冷たいZipimportを使っをしているためである
/worker_url 200 7633ms 34275cpu_ms 28116api_ms 

インポートするにはどうすればよいの長い

  • モジュールはメモリに留まりますか?
  • これらのモジュールをメモリに保持する方法はありますか。後続の呼び出しがこれらのモジュールがメモリ内に留まる時間枠内にない場合でも、依然としてオーバーヘッドを起動しませんか?

答えて

1

アプリエンジンは、同じノード内の同じプロセス内で1つ以上のリクエストを処理している限り、通常のPythonのセマンティクスに従ってすべてをメモリに保持します。それらのリソースが必要な場合は、プロセスがなくなり(以前は使用していたものがメモリに残っていない)、新しいプロセスが(同じノードまたは異なるノード上で)いつでもリクエストを処理できるようになります他のリクエストはまだ実行中かどうか)。これは高速CGIモデルによく似ています.1つのリクエスト内で通常のセマンティクスが保証されていますが、0とNの間のもの(上限なし)とは別のノードでコードが実行されている可能性があります。 K(上限なし)の異なる要求。

"メモリにとどまる"(zipimportedモジュールなどの場合)は何もできません。

完全性のために、特別なメモリ形式で何かを保持する明示的なヒント/リクエストであるmemcache、コードを実行するすべてのプロセス間で共有される分散ハッシュテーブルについて言及しましょう。インポートしたモジュールには不可能ではありません(かなり洗練されたインポートフックが必要です)、そのようなフックを開発するために必要な努力に反対することをおすすめします。このような明示的なヒントがあっても、とにかくキャッシュに隠れてしまった。

むしろ、特にcronの仕事では、アプリエンジンに付属の1.0.2を使用するのではなく、すべてのdjangoやジッパーインポーズが必要なのか分かりません。the docs - 精巧に扱う?これは、最適化するのに便利な問題です。

関連する問題