2014-05-20 50 views
2

我已经在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. 调用命令从网页
  2. 继续在网页上做其他的东西
  3. 一旦命令完成后,网页上显示的通知
  4. 决不重新加载网页
+0

使用[Celery](http://docs.celeryproject.org/en/master/index.html)。 –

+0

我知道芹菜。但是,在我的环境中设置非常困难(没有特权),看起来有点像过分执行单个任务异步。不能用ajax完成吗? – liarspocker

回答

2

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

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

该过程也必须能够在结果可用后进行通信。

+1

subprocess.Popen做了工作谢谢.. 我实际上是在使用suprocess.call,它正在等待命令完成,直到它重定向到.desired页面。 – just10minutes