Profilowanie Django
14 July 2008
Comments
hotshot to profiler dostępny w pythonie. Django posiada zmodyfikowany handler dla mod_python generujący logi hotshota. Dzięki tym logom możemy dowiedzieć się ile czasu zajmuje wykonanie poszczególnych elementów aplikacji.Wymagania
By móc profilować aplikację django musi ona działać pod Apache poprzez mod_python. Oto prosta konfiguracja:Alias /media/ "/ścieżka/django/contrib/admin/media/"
Alias /site_media/ "/ścieżka/site_media/"
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.profiler-hotshot
SetEnv DJANGO_SETTINGS_MODULE settings
PythonPath "['/ścieżka/do/aplikacji/'] + sys.path"
PythonDebug On
</Location>
<Location "/site_media">
SetHandler none
</Location>
PythonHandler django.core.handlers.profiler-hotshot
Zamiast:
PythonHandler django.core.handlers.modpython
Logi zapisywane są domyślnie w /var/log/cmsprofile i katalog ten musi istnieć a apache mieć prawa zapisu. Gdy już wszystko gotowe wystarczy wywołać stronę aplikacji django w przeglądarce. Dla każdego wywołania zapisany zostanie oddzielny plik (ukryty, zaczynający się od kropki).
Pojawiło się też middleware wykorzystujące hotshot do generowania logów dla danego widoku
Generowalnie logów Kcachegrind
kcachegrind to aplikacja KDE do analizy logów profilerów. Istnieje również Wingrind, lecz nie wiem czy potrafi on konwertować logi hotshot do obsługiwanego formatu. Kcachegrind umożliwia konwersję, wystarczy wykonać w konsoli:hotshot2calltree plik.prof > cachegrind.out.01
I otrzymamy plik obsługiwany przez samą aplikację. Efekt:
Jak używać hotshot
Jeżeli chcesz profilować swój skrypt wystarczy taki kod:import hotshot
prof = hotshot.Profile("plik.prof")
prof.start()
#tutaj wykona swój kod
prof.stop()
RkBlog
Comment article