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 command reloads itself and resumes execution of the very long (stateless) loop.
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.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With