开发者

Django - Ajax HttpResponse delay

I have a django view function that calls another function if a condition is true, the function is called as a separate process, the view returns a status variable which shows if the function was called or not, the status is returned to a ajax click event assigned to a button.

The problem is that when the function 'do_work' is executed ajax success function isn't run until 'do_work' terminates.

view function /update/

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

Ajax call

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

the 'print success' gets executed right away in both cases, but the alert wont pop up until the function do_woks terminates


Although you see the printed message before you return HttpResponse(success), that return statement in itself can't asynchronously finish the response.

Presumably after that function returns, your web server is still waiting for something else to happen (such as for all child processes to terminate) before it finishes the response.

For asynchronous tasks in Django I highly recommend Celery.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜