Django - Ajax HttpResponse 延迟
我有一个Django的视图函数,当某个条件满足时,它会调用另一个函数。这个函数是作为一个单独的进程来运行的,视图会返回一个状态变量,用来显示这个函数是否被调用。这个状态会返回给一个按钮的Ajax点击事件。
问题是,当执行' do_work '函数时,Ajax的成功回调函数不会立即运行,而是要等到'do_work'执行完毕后才会运行。
视图函数 /update/
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;
});
在这两种情况下,'print success'会立刻执行,但警告框不会弹出,直到'do_work'函数执行完毕。
1 个回答
1
虽然你在 return HttpResponse(success)
之前看到了打印的消息,但这个返回语句本身并不能异步地完成响应。
可以理解为,在这个函数返回之后,你的网络服务器仍然在等待其他事情发生(比如等待所有子进程结束)才能完成响应。
如果你想在Django中处理异步任务,我强烈推荐使用 Celery。