7

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

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

有什么方法可以将 django 服务器的自动重新加载功能用于我们的管理命令?

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

4

2 回答 2

10

无论您的管理命令在做什么,将其抽象为单个函数并使用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)
于 2016-10-06T06:39:23.300 回答
3

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

于 2011-06-07T21:31:50.487 回答