Django:在后台运行管理命令并在完成时通知HTML

3 投票
1 回答
1672 浏览
提问于 2025-04-18 07:05

我在Django里设置了一个管理员命令:

from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
    """ Command to parse logs that can be called from django """
    def handle(self, *args, **options):
        parse_logs()

我可以通过命令行或者Python代码用call_command来调用这个命令。但是,当我从视图中调用这个命令时,它会阻止应用程序处理其他请求,直到这个命令执行完毕。

我希望能够在后台运行这个命令,也许可以用一个单独的线程,并且在网页上显示命令的结果,而不需要重新加载页面。比如说:

  1. 从网页上调用命令
  2. 继续在网页上做其他事情
  3. 一旦命令完成,就在网页上显示一个通知
  4. 网页永远不需要重新加载

1 个回答

3

你可以使用一个叫做subprocess的模块(Popen)来把管理命令当作一个单独的进程来执行。这样的话,你的视图就不用等这个命令执行完才能继续工作。

这个进程可以在完成后设置一个标志,表示它已经结束。然后你可以定期检查服务器的状态,看看结果是否已经出来,也就是那个标志是否被设置了。

这个进程还需要能够在结果出来后和你沟通,把结果传递过来。

撰写回答