【问题标题】:Django: run admin command in background and notify html when finishedDjango:在后台运行管理命令并在完成时通知 html
【发布时间】:2014-05-20 12:53:44
【问题描述】:

我已经在 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()

我可以使用 call_command 从 shell 或 python 调用。当我从视图中调用它时,此命令会停止对应用程序的所有其他请求,直到它完成为止。

我希望能够在后台运行此命令,可能使用单独的线程,并在网页上显示命令的结果,而无需重新加载页面。例如:

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

【问题讨论】:

  • 使用Celery
  • 我知道芹菜。但是在我的环境中设置非常困难(没有特权),异步执行单个任务似乎有点过分。不能用ajax来做吗?

标签: python html django command


【解决方案1】:

您可以使用子进程模块 (Popen) 将管理命令作为一个单独的进程执行(从而使您的视图不必等待命令完成)。

该过程在完成时可以设置某种标志。然后您将轮询服务器以获取结果,直到它们可用,即标志已设置

一旦结果可用,该过程还必须能够传达结果。

【讨论】:

  • subprocess.Popen 完成了工作谢谢.. 我实际上正在使用 suprocess.call 等待命令完成,直到它重定向到 .desired 页面。
猜你喜欢
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2015-07-26
  • 1970-01-01
相关资源
最近更新 更多