2010-09-06 4 views
2

У меня есть функция просмотра django, которая вызывает другую функцию, если условие истинно, функция вызывается как отдельный процесс, представление возвращает переменную состояния, которая показывает, была вызвана функция или нет, status возвращается в событие ajax click, назначенное кнопке.
Проблема заключается в том, что при выполнении функции do_work функция успеха ajax не запускается до тех пор, пока «do_work» не завершится.Django - Ajax HttpResponse delay

вид функции/обновление/

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 не прекращает

ответ

1

Хотя вы видите напечатанное сообщение перед вами return HttpResponse(success), эта инструкция возврата сама по себе не может асинхронно завершить ответ.

Предположительно, после того, как функция вернется, ваш веб-сервер все еще ждет чего-то еще (как для всех дочерних процессов), прежде чем он завершит ответ.

Для асинхронных задач в Django я настоятельно рекомендую Celery.

+0

Могу ли я запустить функцию асинхронно каким-то образом? Я думаю, что Сельдерей слишком много для моих потребностей. –

+0

Джон, проверьте мои обновления. Может помочь... –

Смежные вопросы