Протестируйте, если задача сельдерея все еще обрабатывается
Как проверить, обрабатывается ли задача (task_id) в celery? У меня есть следующий сценарий:
- Запустить задачу в представлении Django
- Сохраните BaseAsyncResult в сеансе
- Завершить работу демона сельдерея (жесткий), чтобы задача больше не обрабатывалась
- Проверьте, является ли задача "мертвой"
Любые идеи? Можно ли просмотреть всю задачу, обрабатываемую сельдереем, и проверить, все ли у меня там?
Ответы
Ответ 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