Сегодня пришлось задуматься над вопросом: «Почему этот view работает очень медленно?».
Вывод стандартного профилировщика говорит слишком много.
Мне нужно просто знать сколько времени занимает каждая строчка.
Оказалось это успешно решается модулем line_profiler.
Под катом простой способ подключения к django.
Простая установка через pip:
Для того чтобы профилировать view проще всего добавить свой middleware(за основу взят этот snippet).
После небольших модификация получим:
Добавляем наш middleware в файл настроек:
Чтобы посмотреть результат работы профилировщика нужно добавить переменную prof в GET-запрос:
В результате получается вот такая удобная статистика:
Вывод стандартного профилировщика говорит слишком много.
Мне нужно просто знать сколько времени занимает каждая строчка.
Оказалось это успешно решается модулем 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
В результате получается вот такая удобная статистика: