Відповіді:
Спробуйте панель інструментів налагодження Django . Він покаже вам, які запити виконуються на кожній сторінці та скільки часу вони займають. Це справді корисний, потужний та простий у використанні інструмент.
Також прочитайте з документації рекомендації щодо продуктивності Django в оптимізації доступу до бази даних .
І поради щодо ефективності Django від Джейкоба Каплана-Мосса.
Просто введіть "django-профілювання" в Google, і ви отримаєте ці посилання (і багато іншого):
http://code.djangoproject.com/wiki/ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/
Особисто я використовую підхід проміжного програмного забезпечення - тобто кожен користувач може перемикати прапор "профілювання", що зберігається в сеансі, і якщо моє профайлове профайлу помітить, що встановлений прапор, він використовує модуль гарячих знімків Python таким чином:
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
РЕДАГУВАТИ: Для профілювання SQL-запитів http://github.com/robhudson/django-debug-toolbar, згаданий Костянтином, є приємною справою - але якщо ваші запити дійсно повільні (можливо, тому, що їх сотні чи тисячі), то ви буду чекати шалено багато часу, поки він завантажиться в браузер - і тоді його буде важко переглянути через повільність. Крім того, панель інструментів django-debug за своєю конструкцією не може дати корисне розуміння внутрішніх елементів запитів AJAX.
EDIT2: django-extensions має вбудовану чудову команду профілювання:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
Просто зробіть це і вуаля:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
python manage.py runprofileserver --prof-path=/path/to/dir
, дотримуйтесь цього блогу: darkcoding.net/software/profiling-django-for-cpu-bound-apps .
hotshot
застаріла та вилучена у Python 3, тому ця відповідь та ProfilingDjango
сторінка Wiki можуть більше не бути актуальними у 2020 році.
Для профілювання доступу до даних (саме там, де більшість часу є вузьке місце) перевірте django-live-profiler . На відміну від панелі інструментів налагодження Django, вона збирає дані за всіма запитами одночасно, і ви можете запустити їх у виробництві, не надто витрачаючи продуктивність та не розкриваючи внутрішні елементи програми.
Тут безсоромний штекер, але я нещодавно зробив https://github.com/django-silk/silk для цього. Це дещо схоже на панель інструментів django, але з історією, профілюванням коду та більш чітким контролем над усім.
Для всіх вас, шанувальників KCacheGrind, я вважаю, що дуже просто використовувати оболонку в тандемі з фантастичним тестом Django Client
для створення журналів профілю на льоту, особливо у виробництві. Зараз я кілька разів використовував цю техніку, оскільки вона має легкий дотик - не потрібні настирливі проміжні програми та сторонні програми Django!
Наприклад, щоб профілювати певний вигляд, який, здається, працює повільно, ви можете зламати оболонку і ввести цей код:
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
Для візуалізації отриманого журналу я використав hotshot2cachegrind:
Але є й інші варіанти:
Коли подання не є HTML, наприклад JSON, використовуйте прості проміжні методи для профілювання.
Ось кілька прикладів:
https://gist.github.com/1229685 - зафіксувати всі виклики sql, що потрапили у поле зору
https://gist.github.com/1229681 - профіль усіх викликів методів, використаних для створення подання
Нещодавно мені потрібно було скласти профіль програми Django і спробувати багато з цих пропозицій. Я замість цього використав pyinstrument , який можна додати до програми Django за допомогою одного оновлення списку проміжного програмного забезпечення та надає представлення часу на основі стеку.
Короткий підсумок мого досвіду роботи з іншими інструментами:
pyinstrument
cProfile
таймінгу та автоматично відображає таймінги Ajax, що може бути дуже корисним.Порівняно з іншими інструментами, які я пробував, pyinstrument
було значно простіше встановити та використовувати.