Django Silk

django-silk предоставляет подробное профилирование Django приложений с красивым веб-интерфейсом.

Установка

1# Установка пакета
2pip install django-silk
1# Или через Poetry
2poetry add django-silk

Настройка

 1# settings.py
 2INSTALLED_APPS = [
 3    'silk'
 4]
 5
 6MIDDLEWARE = [
 7    'silk.middleware.SilkyMiddleware',
 8]
 9
10# urls.py
11if settings.DEBUG:
12    urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]

Профилирование функций

 1from silk.profiling.profiler import silk_profile
 2
 3@silk_profile(name='View Books')
 4def book_list(request):
 5    books = Book.objects.select_related('author').all()
 6    return render(request, 'books.html', {'books': books})
 7
 8# Или для конкретных блоков кода
 9def process_data(data):
10    with silk_profile(name='Data Processing'):
11        # Дорогие операции
12        result = expensive_operation(data)
13        return result

Настройка профилирования

 1# settings.py
 2# Включить профилирование только для определенных пользователей
 3SILKY_PYTHON_PROFILER = True
 4SILKY_PYTHON_PROFILER_RESULT_PATH = '/tmp/silk/'
 5
 6# Ограничить количество записей
 7SILKY_MAX_RECORDED_REQUESTS = 1000
 8SILKY_MAX_RECORDED_REQUESTS_CHECK_PERCENT = 10
 9
10# Фильтрация запросов
11SILKY_IGNORE_PATHS = [
12    '/admin/',
13    '/static/',
14    '/media/',
15]

Анализ производительности

Silk показывает:

  • Время выполнения запросов
  • SQL запросы и их время
  • Использование памяти
  • Профили Python кода
  • Статистику по эндпоинтам

FAQ

Q: Можно ли использовать в production?
A: Не рекомендуется из-за накладных расходов на производительность.

Q: Как очистить старые записи?
A: Используй команду manage.py или настрой автоматическую очистку.