如何分析Django应用程序相对于执行时间?(How to profile django appli

2019-06-24 22:25发布

我的Django应用程序是出奇的慢,我想弄清楚什么是服用时间:

我想Django-debug-toolbar ,但无法找到一个面板,可以给我的加载时间分手。

我的要求:

  • 堆栈-跟踪型与输出执行对每个调用,以呈现该页面模块的时间。
  • 我想知道什么整个页面渲染过程的一部分走的是时间?
  • 此外,什么部分是消耗多少CPU [最重要]

可以django-debug-toolbar做到这一点? [什么板? ]

任何其他Django的应用程序,可以做到这一点?

Answer 1:

你可以尝试Django的调试工具栏(请确保您使用的应用程序的最新版本从性能分析面板github上 )。 启用像这样在你的settings.py面板:

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

此面板的这种存在未记录在Django的调试工具栏里的自述; 这就是为什么我首先回答在这里。

编辑 :如果您使用的Django调试工具栏v1.0和面板上方已更名为debug_toolbar.panels.profiling.ProfilingPanel ,现在这里记录http://django-debug-toolbar.readthedocs.org/en /1.0/panels.html#non-default-built-in-panels 。 它仍然不是默认启用。



Answer 2:

最后想出一个办法来分析我的Django的web应用程序:

以下的2个片段的django提供middleware该配置文件的整个流,并输出请求是否已profGET keys

  • http://djangosnippets.org/snippets/727/ [用途CPROFILE]

  • http://djangosnippets.org/snippets/186/ [用途能手]

平原和简单分析 - 救了我的天!



Answer 3:

我建议写一些集成测试,而不是,或至少使用内置的测试客户端自动请求,并把大量的调试语句的意见

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时间,可以计算出。 它不会带你长的磨练,实际上是咀嚼资源的部分。



Answer 4:

它不可貌相,但我通常只使用一个视图来计算的执行时间,它的工作原理也为那些需要用户登录的看法,它显示执行时间在一个简单的页面

 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})

这是一个良好的开端,我认为,希望这将帮助别人



Answer 5:

Django的丝绸可以提供帮助。

  • 与安装: 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

然后,您可以在您的互联网浏览器浏览/silk找请求那里的页面。



文章来源: How to profile django application with respect to execution time?