- パフォーマンス: hotshotまたはpythonプロファイル/ cProfile + kcachegrindログビジュアライザー ( WinCacheGrindに類似したwindows用のポートがあります )
- メモリ使用量:ウェブベースのダウザー
性能
- 統計プロファイラオプションを収集します。
- クイックホットショットを使用した例1(これは非推奨になる可能性があります):
import hotshot prof = hotshot.Profile("your_project.prof") prof.start() # your code goes here prof.stop() prof.close()
kcachegrind-convertersパッケージのユーティリティを使用してログ形式を変換します。
hotshot2calltree your_project.prof > your_project.out
- 標準プロファイル/ cProfileを使用した例2:
python -m cProfile -o your_project.pyprof your_project.py
pyprof2calltreeを使用してログ形式を変換します。
pyprof2calltree -i your_project.pyprof -o your_project.out
(-kオプションを使用すると、すぐにkcachegrindが開始され、中間ファイルを作成する必要はありません)
- クイックホットショットを使用した例1(これは非推奨になる可能性があります):
- kcachegrindビジュアライザーでログを開いて調べます
誰かのコードでトリッキーな再帰的インポートを見つけたときに、アプリケーションのプロファイリングに初めてDjangoを使用する必要がありました。 次に、mod_pythonの既存のハンドラーを使用しましたが、後者はもはや一般的ではないため、 代替接続方法やプロファイリング用のモジュールでさえかなり前に登場しました(後者は使用しませんでした)。
記憶
残念ながら、私はそれをシンプルで楽しいものにする方法をまだ知りません。 デバッガーをざっと調べたくありませんでした。 グッピーには満足していませんでした-それは強力ですが、難しい-幸いなことに、プロファイリングする必要はありません。 また、Objgraphは、 デバッグシェルの外部への簡単なナビゲーションも提供しません。
私が選択したのは、 ダウザー 、CherryPyのインターフェースを備えたアプリケーションです。 それほど柔軟ではありませんが、彼にとってはすべてがシンプルです。
- コントローラー、基本的にCherryPy 3アプリケーションを作成します。
# memdebug.py import cherrypy import dowser def start(port): cherrypy.tree.mount(dowser.Root()) cherrypy.config.update({ 'environment': 'embedded', 'server.socket_port': port }) cherrypy.engine.start()
- アプリケーションに接続します。
import memdebug memdebug.start(8080) # your code goes here
- ブラウザーに移動して統計を表示します(CherryPyのオブジェクト、他のライブラリは無視します-私たちだけのものを探しています)
http://localhost:8080/
機能は禁欲的で、クリックして少し理解する必要がありますが、問題を見つけるには十分です。 デバッガーAPIを覚えて覚える必要はありません。 注意、「ツリー全体を表示する」などの一部の操作では、大規模なアプリケーションには大量のメモリが必要になる場合があります。 - アプリケーション自体は閉じません。 学習後、Ctrl + Zを中断して強制終了します
どのようなプロファイリング方法とツールがまだ知っておく価値がありますか?