2010-09-06 53 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