Django - Ajax HttpResponse 延迟

2 投票
1 回答
975 浏览
提问于 2025-04-16 03:45

我有一个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

撰写回答