Profilowanie skryptów Pythona oraz Django za pomocą cProfile i Kcachegrind

Analizujemy czas wykonywania się poszczególnych fragmentów kodu naszych aplikacji i skryptów

Swego czasu pisałem o profilowaniu Django za pomocą hotshot z mod_pythonem. Teraz mamy inne narzędzia by profilować wykonywanie skryptów Pythona, np. cProfile i różne nakładki. Tak jak poprzednio dane wyjściowe można przekazać do kcachegrind by je zobrazować i wyszukać interesujące nas fragmenty kodu. Zobaczmy więc czym dzisiaj dysponujemy.

Profilowanie z cProfile

Najprostszy przypadek do wywołanie skryptu z flagami profilera:

python -m cProfile -o profiling_data.pyprof skrypt.py

Instalując z pypi pakiet pyprof2calltree można skonwertować plik do formatu kompatybilnego z kcachegrindem i go nawet od razu uruchomić:

pyprof2calltree -i profiling_data.pyprof -k
Profil testów z użyciem selenium

Profil testów z użyciem selenium pokazuje że na najwięcej czasu traci na sleepach

To rozwiązanie pozwala profilować skrypty jakie możemy wykonać. Dotyczy to też np. testów, czy management commands Django - ale do tego trzeba użyć lokalnego pliku manage.py a nie django-admin.

Prosty dekorator zapewnia profilestats, który zapisuje do pliku (cachegrind.out.profilestats).

Dla Django lepsze może być django-extensions. Instalujemy, dodajemy do INSTALLED_APPS i możemy odpalić serwer deweloperski poleceniem:

python manage.py runprofileserver --kcachegrind --prof-path=/jakiś/katalog/na/logi/

W podanym katalogu generowane będą pliki z wynikami. Wystarczy w kcachegrind otworzyć wybrany plik.

Instalacja Kcachegrind

Kcachegrind wchodzi w skład aplikacji KDE. Pod Linuksem jego instalacja to nie problem. Pod Windowsem można użyć instalatora KDE4 dla Windowsa lub Qcachegrind, a pod OSX aplikacje KDE też są dostępne przez repozytoria Linuksowo/Uniksowych pakietów. Zawsze też można odpalić desktopowego Linuksa w maszynie wirtualnej.

blog comments powered by Disqus

Kategorie

Strony