测试芹菜任务是否仍在处理中

时间:2010-12-02 13:36:32

标签: python django celery celery-task

如何测试celery中是否仍处理任务(task_id)?我有以下情况:

  1. 在Django视图中启动任务
  2. 将BaseAsyncResult存储在会话中
  3. 关闭芹菜守护程序(硬)以便不再处理任务
  4. 检查任务是否“死”
  5. 有什么想法吗?可以查找芹菜正在处理的所有任务并检查我的是否仍在那里?

2 个答案:

答案 0 :(得分:3)

在模型中定义一个字段(PickledObjectField)来存储芹菜任务:

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

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

如果您的任务不是特定于任何模型,您应该专门为芹菜任务创建一个。

或者我建议使用django-celery。它有一个很好的监控功能:
http://ask.github.com/celery/userguide/monitoring.html#django-admin-monitor,以精美的图形方式将任务详细信息保存在django模型中。

答案 1 :(得分:0)

我认为有一种比在模型中存储任务对象更好的方法。例如,如果您想检查一组任务(并行)是否已完成:

# 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