2010-09-06 110 views
2

我有一個django視圖函數調用另一個函數,如果條件爲真,該函數被稱爲一個單獨的進程,該視圖返回一個狀態變量,該函數顯示該函數是否被調用,狀態返回到分配給按鈕的ajax點擊事件。
問題是,當執行函數'do_work'時,直到'do_work'終止,纔會運行ajax成功函數。Django - Ajax HttpResponse延遲

取景功能/更新/

if condition: 
     p = Process(target=do_work, args(pack,)) 
     p.daemon = True 
     p.start() 
     success = "True" 
else: 
     success = "False" 
print success 
return HttpResponse(success) 

Ajax調用

$('button.update').click(function() { 
       id = $(this).attr('id'); 
       $.post("/update/", { 
       pack : id, 
       }, function(result){ 
        alert(result); 
        }); 
       return false; 
       }); 

「打印成功」被執行在這兩種情況下馬上,但警報不會彈出直到函數do_woks終止

回答

1

儘管您在return HttpResponse(success)之前看到打印的消息,但該return語句本身不能異步完成響應。

大概在該函數返回之後,您的Web服務器在完成響應之前仍在等待其他事情發生(例如所有子進程終止)。

對於Django中的異步任務,我強烈建議使用Celery

+0

我不能以某種方式異步運行函數嗎?我認爲芹菜對我的需求有點太大 – 2010-09-06 10:48:16

+0

John,請查看我的更新。可能有幫助... – 2010-09-06 11:09:48