Подтвердить что ты не робот

Протестируйте, если задача сельдерея все еще обрабатывается

Как проверить, обрабатывается ли задача (task_id) в celery? У меня есть следующий сценарий:

  • Запустить задачу в представлении Django
  • Сохраните BaseAsyncResult в сеансе
  • Завершить работу демона сельдерея (жесткий), чтобы задача больше не обрабатывалась
  • Проверьте, является ли задача "мертвой"

Любые идеи? Можно ли просмотреть всю задачу, обрабатываемую сельдереем, и проверить, все ли у меня там?

4b9b3361

Ответ 1

определить поле (PickledObjectField) в вашей модели для хранения задачи сельдерея:

class YourModel(models.Model):
    .
    .
    celery_task = PickledObjectField()
    .
    .

    def task():
        self.celery_task = SubmitTask.apply_async(args = self.task_detail())
        self.save()

Если ваша задача не является конкретной для любой модели, вы должны создать ее специально для задач сельдерея.

или я предлагаю использовать django-сельдерей. Он имеет приятную функцию мониторинга:
http://ask.github.com/celery/userguide/monitoring.html#django-admin-monitor, сохраняет детали задач в модели django красивым графическим способом.

Ответ 2

Я думаю, что есть лучший способ, чем хранить объект задачи в модели. Например, если вы хотите проверить, завершена ли группа задач (параллельная):

# in the script you launch the task
from celery import group

job = group(
    task1.s(param1, param2),
    task2.s(param3, param4)
)
result = job.apply_async()
result.save()

# save the result ID in your model
your_obj_model = YourModel.objects.get(id='1234')
your_obj_model.task_id = result.id
your_obj_model.save()

Затем на ваш взгляд

from celery.result import GroupResult
# ...
task_result = GroupResult.restore(your_obj_model.task_id)
task_finished = task_result.ready()
# will be True or False