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を中断して強制終了します

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

Source: https://habr.com/ru/post/J110537/


All Articles