#django #django-command-extensions
#django #django-command-extensions
Вопрос:
Мне нравится, как сервер django автоматически перезагружается при изменении кода, так что перезапуск сервера не требуется.
В настоящее время мы используем пользовательские команды управления django, выполнение которых может занять очень много времени.
Есть ли какой-либо способ, которым мы можем использовать функцию автоматической перезагрузки сервера django для нашей команды управления?
Например, если обнаружено изменение базовой кодовой базы django, команда перезагружается и возобновляет выполнение очень длинного цикла (без состояния).
Ответ №1:
Что бы ни делала ваша команда управления, сведите это к одной функции и вызовите эту функцию с помощью django.utils.autoreload.main
from django.utils import autoreload
def do_something(*args, **kwargs):
# management command logic
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout('This command auto reloads. No need to restart...')
autoreload.main(do_something, args=None, kwargs=None)
Для django 2.2 или выше используйте
autoreload.run_with_reloader(do_something, args=None, kwargs=None)
Комментарии:
1.
autoreload.main()
теперь отсутствует по состоянию на github.com/django/django/commit /…
Ответ №2:
Проверьте способ, которым runserver (в частности, метод run) выполняет это с помощью модуля django.utils.autoreload. Вы захотите скопировать этот шаблон в свою пользовательскую команду.