Django давно умеет автоматически перезапускать
runserver при изменении Python-файлов. Но стандартная реализация работает неэффективно — она постоянно опрашивает файловую систему, нагружая CPU и замедляя работу.Теперь появился более современный и быстрый способ — `django-watchfiles`, который использует нативные API отслеживания файловых изменений.
Преимущества нового подхода:
❇️ Перезапуск сервера происходит быстрее
❇️ Меньше нагрузка на процессор и экономия энергии
❇️ Более надёжная работа благодаря Rust-библиотеке
watchfilesДо этого Django предлагал интеграцию с Watchman, но она требовала отдельной установки и обслуживания, а библиотека
pywatchman давно не обновлялась.Теперь у нас есть полноценная альтернатива: кроссплатформенная библиотека
watchfiles.Настроить всё очень просто
1️⃣ Установите пакет (например, через uv):
uv add django-watchfiles
2️⃣ Добавьте приложение в
INSTALLED_APPS:INSTALLED_APPS = [
...,
"django_watchfiles",
...,
]
3️⃣ Запустите проект и убедитесь, что autoreloader работает через
WatchfilesReloader:./manage.py runserver
Watching for file changes with WatchfilesReloader
📊 На проекте среднего размера (~385k строк кода + 206 пакетов) на M1 MacBook стандартный Django reloader потреблял ~10% CPU каждые 2 секунды, в то время как
django-watchfiles использовал 0% CPU.🐸 Библиотека питониста
#буст