Работая над проектом python django, вот что я хочу:
Доступ пользователя
Page1
с аргументом объекта, функцияlongFunction()
объекта запускается и передается celery, поэтому страница может быть немедленно возвращенаЕсли пользователь пытается получить доступ к
Page2
с тем же аргументом объекта, я хочу, чтобы страница зависала до тех пор, пока функция объектаlongFunction()
, запущеннаяPage1
, не будет завершена.
Поэтому я попытался заблокировать строку базы данных mysql с помощью objects.select_for_update(), но это не сработало.
Вот упрощенная версия моего кода:
def Page1(request, arg_id):
obj = Vm.objects.select_for_update().get(id=arg_id)
obj.longFunction.delay()
return render_to_response(...)
def Page2(request, arg_id):
vm = Vm.objects.select_for_update().get(id=arg_id)
return render_to_response(...)
Я хочу, чтобы Page2
висело на строке vm = Vm.objects.select_for_update().get(id=arg_id)
, пока не завершится longFunction()
. Я новичок в сельдерее, и похоже, что соединение mysql, инициированное на странице 1, теряется, когда страница 1 возвращается, даже если longFunction()
не завершена.
Есть ли другой способ добиться этого?
Спасибо