Pythonアプリケーションのプロファイリング

プロファイリングに関するリンクと例を含む簡単なメモ:

  1. パフォーマンス: hotshotまたはpythonプロファイル/ cProfile + kcachegrindログビジュアライザーWinCacheGrindに類似したwindows用ポートがあります
  2. メモリ使用量:ウェブベースのダウザー




性能



  1. 統計プロファイラオプションを収集します。



    • クイックホットショットを使用した例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が開始され、中間ファイルを作成する必要はありません)





  2. kcachegrindビジュアライザーでログを開いて調べます





誰かのコードでトリッキーな再帰的インポートを見つけたときに、アプリケーションのプロファイリングに初めてDjangoを使用する必要がありました。 次に、mod_python既存のハンドラーを使用しましたが、後者はもはや一般的ではないため、 代替接続方法プロファイリング用のモジュールでさえかなり前に登場しました(後者は使用しませんでした)。







記憶



残念ながら、私はそれをシンプルで楽しいものにする方法をまだ知りません。 デバッガーをざっと調べたくありませんでした。 グッピーには満足していませんでした-それは強力ですが、難しい-幸いなことに、プロファイリングする必要はありません。 また、Objgraphは、 デバッグシェルの外部への簡単なナビゲーションも提供しません。



私が選択したのは、 ダウザー 、CherryPyのインターフェースを備えたアプリケーションです。 それほど柔軟ではありませんが、彼にとってはすべてがシンプルです。



  1. コントローラー、基本的に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()
          
          





  2. アプリケーションに接続します。

     import memdebug memdebug.start(8080) # your code goes here
          
          





  3. ブラウザーに移動して統計を表示します(CherryPyのオブジェクト、他のライブラリは無視します-私たちだけのものを探しています)

      http://localhost:8080/
          
          











    機能は禁欲的で、クリックして少し理解する必要がありますが、問題を見つけるには十分です。 デバッガーAPIを覚えて覚える必要はありません。 注意、「ツリー全体を表示する」などの一部の操作では、大規模なアプリケーションには大量のメモリが必要になる場合があります。
  4. アプリケーション自体は閉じません。 学習後、Ctrl + Zを中断して強制終了します


どのようなプロファイリング方法とツールがまだ知っておく価値がありますか?



All Articles