14

私のDjangoアプリケーションは非常に遅いです.何が時間がかかっているのかを知りたいです:

試してみDjango-debug-toolbarましたが、ロード時間の分割を表示できるパネルを見つけることができませんでした。

私の要件:

  • ページをレンダリングするために呼び出される各モジュールの実行時間を含むスタック トレース タイプの出力。
  • ページのレンダリング プロセス全体のどの部分に時間がかかっているかを知りたいですか?
  • また、どの部分がどのくらいの CPU を消費していますか [最も重要] ?

それはできdjango-debug-toolbarますか?【何のパネル?]

それができる他のジャンゴアプリはありますか?

4

5 に答える 5

20

django-debug-toolbar2.0

デフォルトでは、django-debug-toolbar2.0 に'debug_toolbar.panels.profiling.ProfilingPanel'は設定が含まれていますDEBUG_TOOLBAR_PANELS。このプロファイリング情報を表示するには、ツールバーの [Profiling] チェックボックスをオンにしてページを更新します。

の古いバージョンdjango-debug-toolbar:

django-debug-toolbar のプロファイリング パネルを試すことができます (必ずgithubからアプリケーションの最新バージョンを使用してください)。settings.py で次のようにパネルを有効にします。

DEBUG_TOOLBAR_PANELS = (
  'debug_toolbar.panels.version.VersionDebugPanel',
  'debug_toolbar.panels.timer.TimerDebugPanel',
  'debug_toolbar.panels.profiling.ProfilingDebugPanel',
)

このパネルの存在は、django-debug-toolbar の readme には記載されていません。それが私が最初にここで答える理由です。

于 2012-11-26T16:30:30.683 に答える
13

最後に、私の django webapp をプロファイリングする方法を見つけました:

次の 2 つの django スニペットはmiddleware、フロー全体をプロファイルし、リクエストが含まれている場合は出力profGET keysます。

プレーンでシンプルなプロファイリング - 私の一日を救った!

于 2012-05-30T05:55:22.970 に答える
2

代わりにいくつかの統合テストを作成するか、少なくとも組み込みのテスト クライアントを使用してリクエストを自動化し、ビューに多くのデバッグ ステートメントを配置することをお勧めします。

Django には組み込みのテスト クライアントがあります。

from django.test.client import Client
c = Client()
response = c.post('/slow_url/')

そして、あなたの見解では:

def slow_url(request):
    start = time.time()
    print 'Started db query'
    result = SomeComplexModel.objects.all()
    print 'Finished db query, took ', time.time() - start
    return render('some_complex_template.html', {'result': result})  

リクエストを作成するプロセスを自動化し、小さな変更を加えながら何度でもリクエストを複製できるようにすることが、コードを改善する方法です。各関数の実行にかかる時間を測定すると、CPU 時間がわかります。実際にリソースを食いつぶしている部分に焦点を合わせるのに、それほど時間はかかりません。

于 2012-05-29T13:41:36.157 に答える