当芹菜中的任务组完成时发送成功信号

时间:2015-05-20 09:23:45

标签: django signals task celery

所以我有一个基本配置 django 1.6 + 芹菜3.1 。假设我有一个示例任务:

@app.task
def add(x, y):
    time.sleep(6)
    return {'result':x + y}

一个分组并返回作业ID的函数

def nested_add(x,y):
   grouped_task = group(add.s(x,y) for i in range(0,2))
   job = result_array.apply_async()
   job.save()
   return job.id

现在,我希望在完成该组任务后执行某些操作,但是如果我将 app.task装饰器添加到 nested_add 并尝试捕获 task_success 然后它将无法正常工作。我应该使用什么提示?

1 个答案:

答案 0 :(得分:1)

实际上有几种选择。最简单的是使用和弦。 Chord会哭,直到所有子任务都完成了一些结果,然后返回整体结果。可以找到更多http://ask.github.io/celery/userguide/tasksets.html。另一种简单的方法是利用AsyncResult API的collect()方法。更多信息可以在这里找到:http://celery.readthedocs.org/en/latest/reference/celery.result.html

不要忘记配置结果后端。可以找到更多http://celery.readthedocs.org/en/latest/getting-started/first-steps-with-celery.html#keeping-results。如果你使用RabbitMQ作为brocker,那么也将它配置为结果后端。