Имам уеб сървър на django и форма, в коятопотребителят въвежда информация. Всеки път, когато промените в информацията за формата обновявам модела в базата си данни, и в определен момент, когато нещо потвърждава, ще създам дългосрочна задача в целина, за да получа резултатите си още преди потребителят да е натиснал следващата.
Използвам Django Celer с RabbitMQ като брокер,и въпросът ми е какъв е най-подходящият начин на ВЪВЕДИ задачата все още не е приключила, за да заключите нишката на отговор в django, докато задачата е state.SUCCESSFUL Опитах се да използвам AsyncResult.get метод за това, но той просто заключва нишката за реално дълго време и след това ми дава резултат. IE Това не е миг, някой има ли идея как да се реши това?
Отговори:
2 за отговор № 1Можете просто да изчакате, докато резултатът бъде ready()
.
from time import sleep
result = some_task.apply_async(args=myargs)
while not result.ready():
sleep(0.5)
result_output = result.get()
Оказва се, че има и a wait()
, така че можете просто да го използвате. Следното трябва в общи линии да прави същото като кода по-горе.
result = some_task.apply_async(args=myargs)
result_output = result.wait(timeout=None, interval=0.5)
1 за отговор № 2
Един от начините да се постигне това е да се очакват резултати в redis и да се използват a блокиране на поп операция, използваща някаква уникална стойност като идентификатор на сесия, отбележете способността й за изчакване.