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.
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>
Różnica to:
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
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:
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()
Plik *prof konwertujemy w ten sam sposób.
- Dodane: 14.07.2008 przez riklaunim