2014-05-20 84 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