【问题标题】:Send a success signal when the group of tasks in celery is finishedcelery 中的一组任务完成时发送成功信号
【发布时间】:2015-08-01 10:56:05
【问题描述】:

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

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

还有一个分组和返回job 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 那么它将无法正常工作。我应该使用什么的任何提示?

【问题讨论】:

  • 您是否尝试过链接群组。又名让它成为和弦?
  • @user2097159,谢谢你,我已经在读它了,我想就是这样

标签: django signals task celery


【解决方案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 作为代理,那么也将其配置为结果后端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2017-06-27
    • 2013-08-13
    相关资源
    最近更新 更多