如何在执行时间方面描述django应用程序?

时间:2012-05-29 13:17:17

标签: python django performance cpu-speed django-debug-toolbar

我的Django应用程序非常慢,我想弄明白什么需要时间:

我尝试了Django-debug-toolbar,但无法找到可以让我分解加载时间的面板。

我的要求:

  • 堆栈跟踪类型输出,每个模块的执行时间都被调用以呈现页面。
  • 我想知道整个页面渲染过程的哪一部分花费时间?
  • 另外,哪些部分消耗了多少CPU [最重要]?

可以django-debug-toolbar这样做吗? [什么小组? ]

任何其他可以做到这一点的django-app?

5 个答案:

答案 0 :(得分:15)

您可以尝试使用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的自述文件中;这就是为什么我首先回答这个问题。

编辑:如果您使用的是django-debug-toolbar v1.0及更高版本,则该面板已重命名为debug_toolbar.panels.profiling.ProfilingPanel,现在已在此处记录http://django-debug-toolbar.readthedocs.org/en/1.0/panels.html#non-default-built-in-panels。它默认情况下仍未启用。

答案 1 :(得分:11)

最后找到了一种方法来描述我的django webapp:

以下2个django片段提供middleware概述整个流程和输出if 请求在prof中有GET keys

简单简单的描述 - 节省了我的一天!

答案 2 :(得分: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时间。在实际咀嚼资源的部分,不需要花很长时间磨练。

答案 3 :(得分:2)

它没有分析,但我通常只是使用一个视图来计算执行时间,它也适用于那些视图 需要用户登录,它在一个简单的页面中显示执行时间

 def test(request):
     from django.test.client import Client
     import time

     c = Client()

     #client login if needed
     response = c.post('/login/', {'username': 'admin', 'password': 'password'})

     start = time.time()
     response = c.get('/pagetotest/')

     #print response
     #print 'Finished, time: ', time.time() - start # output to console
     end=time.time() - start
     return render(request,'loadingtime.html',{'time':end})
我认为这是一个好的开始,希望它会帮助某人

答案 4 :(得分:0)

django-silk可以提供帮助。

  • 通过以下方式安装:pip install django-silk
  • 将其添加到settings.py中:
MIDDLEWARE = [
    ...
    'silk.middleware.SilkyMiddleware',
    ...
]

INSTALLED_APPS = (
    ...
    'silk'
)
  • urls.py中添加路线:
urlpatterns += [url(r'^silk/', include('silk.urls', namespace='silk'))]
  • 最后,使用以下命令在数据库中创建足够的表:
python manage.py makemigrations
python manage.py migrate

然后,您可以在Internet浏览器中浏览到/silk,以找到在那里请求的页面。