所以我有一个基本配置 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 然后它将无法正常工作。我应该使用什么提示?
答案 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,那么也将它配置为结果后端。