Profilowanie widoków Django z wykorzystaniem KCacheGrind
4 August 2011
Comments
Stosując django-command-extensions możemy profilować Django działające na serwerze deweloperskim generując zarazem gotowe logi dla KCacheGrinda.

python setup.py install
Po czym dodać do INSTALLED_APPS naszego projektu aplikację:
'django_extensions',
Od tej chwili możemy uruchomić naszą aplikację poleceniem:
python manage.py runprofileserver --kcachegrind --prof-path=/katalog/na/logi/
I otworzyć w przeglądarce interesujący nas widok, by otrzymać gotowe pliki logów.
Proste profilowanie widoku
Poniżej przedstawiam nieco starsze rozwiązanie. Na djangosnippets znajdziemy middleware umożliwiające profilowanie widoków.import sys
import hotshot, tempfile
import hotshot.stats
from django.conf import settings
from cStringIO import StringIO
class ProfileMiddleware(object):
def process_request(self, request):
if settings.DEBUG and request.has_key('prof'):
self.tmpfile = tempfile.NamedTemporaryFile()
self.prof = hotshot.Profile(self.tmpfile.name)
def process_view(self, request, callback, callback_args, callback_kwargs):
if settings.DEBUG and request.has_key('prof'):
return self.prof.runcall(callback, request, *callback_args, **callback_kwargs)
def process_response(self, request, response):
if settings.DEBUG and request.has_key('prof'):
self.prof.close()
out = StringIO()
old_stdout = sys.stdout
sys.stdout = out
stats = hotshot.stats.load(self.tmpfile.name)
#stats.strip_dirs()
stats.sort_stats('time', 'calls')
stats.print_stats()
sys.stdout = old_stdout
stats_str = out.getvalue()
if response and response.content and stats_str:
response.content = "<pre>" + stats_str + "</pre>"
return response
hotshot2calltree tmp* > cachegrind.out.01
Logi cachegrinda można obejżeć w KCacheGrind lub WinGrind.


RkBlog
Comment article