Django:在后台运行管理命令并在完成时通知HTML
我在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 个回答
3
你可以使用一个叫做subprocess的模块(Popen)来把管理命令当作一个单独的进程来执行。这样的话,你的视图就不用等这个命令执行完才能继续工作。
这个进程可以在完成后设置一个标志,表示它已经结束。然后你可以定期检查服务器的状态,看看结果是否已经出来,也就是那个标志是否被设置了。
这个进程还需要能够在结果出来后和你沟通,把结果传递过来。