Как стать автором
Обновить

Профилирование django views

Сегодня пришлось задуматься над вопросом: «Почему этот view работает очень медленно?».
Вывод стандартного профилировщика говорит слишком много.
Мне нужно просто знать сколько времени занимает каждая строчка.
Оказалось это успешно решается модулем line_profiler.
Под катом простой способ подключения к django.

Простая установка через pip:
pip install line-profiler

Для того чтобы профилировать view проще всего добавить свой middleware(за основу взят этот snippet).
После небольших модификация получим:
import sys
import cProfile
from cStringIO import StringIO
from django.conf import settings
import  line_profiler

class ProfilerMiddleware(object):
    def process_view(self, request, callback, callback_args, callback_kwargs):
        if settings.DEBUG and 'prof' in request.GET:
            self.profiler = line_profiler.LineProfiler()
            self.profiler.add_function(callback)
            self.profiler.enable()
            args = (request,) + callback_args
            return callback(*args, **callback_kwargs)

    def process_response(self, request, response):
        if settings.DEBUG and 'prof' in request.GET:
            out = StringIO()
            old_stdout, sys.stdout = sys.stdout, out
            self.profiler.print_stats()
            sys.stdout = old_stdout
            response.content = '<pre>%s</pre>' % out.getvalue()
        return response


Добавляем наш middleware в файл настроек:
if DEBUG:
    MIDDLEWARE_CLASSES += ( 'geobackend.profile_middleware.ProfilerMiddleware', )


Чтобы посмотреть результат работы профилировщика нужно добавить переменную prof в GET-запрос:
http://localhost:8000/?prof
В результате получается вот такая удобная статистика:
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Изменить настройки темы