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.
精彩评论