I love how django server auto-reloads itself on code change, so that no restarting the server is required.
We currently use django custom management commands that may take a very long time to complete.
Is there any way we can use the auto-reloading feature of the django server for our management command?
For example, if the change of the underlying django codebase is detected, the 开发者_如何学Gocommand reloads itself and resumes execution of the very long (stateless) loop.
Whatever your management command is doing, abstract that to a single function and call that function using 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)
For django 2.2 or above use
autoreload.run_with_reloader(do_something, args=None, kwargs=None)
Checkout the way runserver (specifically the run method) does it with the django.utils.autoreload module. You'll want to copy this pattern with your custom command.
精彩评论