为自定义管理命令重用django代码自动重新加载功能

时间:2011-06-07 21:11:24

标签: django django-command-extensions

我喜欢django服务器如何在代码更改时自动重新加载,因此不需要重新启动服务器。

我们目前使用的django自定义管理命令可能需要很长时间才能完成。

  

我们有什么方法可以使用   django的自动重装功能   我们的管理命令的服务器?

例如,如果检测到底层django代码库的更改,则该命令会重新加载并继续执行非常长(无状态)的循环。

2 个答案:

答案 0 :(得分:5)

无论您的管理命令是做什么,将其抽象为单个函数并使用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 :(得分:4)

runserver模块检查django.utils.autoreload(特别是run方法)的方式。您需要使用自定义命令复制此模式。