我有一个 Django View 函数,如果条件为真,它会调用另一个函数,该函数作为一个单独的进程被调用, View 返回一个状态变量,显示该函数是否被调用,状态返回到一个分配给按钮的 ajax 单击事件。
问题是,当执行函数“do_work”时,ajax 成功函数不会运行,直到“do_work”终止。
查看函数/更新/
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 终止之前不会弹出警报
最佳答案
尽管您在return HttpResponse(success)
之前看到了打印的消息,但 return 语句本身无法异步完成响应。
大概在该函数返回之后,您的网络服务器在完成响应之前仍在等待其他事情发生(例如所有子进程终止)。
对于 Django 中的异步任务,我强烈推荐 Celery .
关于jquery - Django - Ajax HttpResponse 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650465/