【问题标题】:Wait for all tasks in a celery group to finish or error out等待 celery 组中的所有任务完成或出错
【发布时间】:2020-10-12 00:13:55
【问题描述】:

我有一组要并行运行的 celery 任务,然后等待它们全部完成。我目前正在使用:

group(task_list).apply_async().get()

(有关更多详细信息,请参阅我的其他问题:Wait for all tasks in a celery group to finish or error out) 当我的所有任务都毫无例外地运行时,这完美无缺。但是,如果任何任务抛出异常,它会立即返回。

我可以在每个任务周围添加一个 try/except 并让它返回一个自定义错误对象,但随后它在花仪表板中显示为“成功”。

是否可以等待所有错误和异常完成?

【问题讨论】:

    标签: celery


    【解决方案1】:

    您应该使用和弦,而不是组。来自celery docs

    和弦是一个任务,它只在一个任务中的所有任务之后执行 组已完成执行。

    result = chord(task_list)(handle_results)
    

    chord()返回的任务id就是回调的id,所以可以等待它完成,得到最终的返回值

    result.get()
    

    如果其中一项任务引发异常,会发生什么? chord回调结果会转为失败状态,错误设置为ChordError异常

    print(result.traceback)
    

    【讨论】:

    • 这似乎与 .get() 有相同的问题,如果其中一个抛出异常,我无法获得任何任务结果?
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    相关资源
    最近更新 更多