/ / Спрете нишката, докато целина завърши - python, django, celer

Спрете конеца, докато завърши задачата за целина - питън, джанго, целина

Имам уеб сървър на 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 блокиране на поп операция, използваща някаква уникална стойност като идентификатор на сесия, отбележете способността й за изчакване.