Я не думаю, что есть предпочтительный способ сделать что-то подобное, так как это зависит от вашего проекта.Вы можете использовать задачу мониторинга, например, ссылку, которую вы отправили.Присвойте задаче идентификатор задачи и перепланируйте задачу, пока отслеживаемая задача не перейдет в состояние ЗАВЕРШЕНО.
from celery import AsyncResult
@app.task(bind=True)
def monitor_task(self, t_id):
"""Monitor a task"""
res = AsyncResult(t_id, backend=self.backend, app=self.app)
if res.ready():
raise self.retry(
countdown=10,
exc=Exception("Main task not done yet.")
)
Вы также можете создать приемник событий и проверить состояние задачи, а затем сохранить ее наDB.http://docs.celeryproject.org/en/latest/userguide/monitoring.html#real-time-processing
Теперь, если вас интересуют только состояния успеха и сбоя, вы можете создать обратные вызовы успеха и сбоя и сохранить в нем состояние успеха или сбоя.
tasks.run_simulation.apply_async(
(sim_id,),
link=tasks.success_handler.s(),
link_error=tasks.error_handler()
)
http://docs.celeryproject.org/en/latest/userguide/calling.html#linking-callbacks-errbacks