开发者

Reusing django code auto-reload functionality for custom management commands

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜