【问题标题】:Dask worker graceful task failureDask worker 优雅的任务失败
【发布时间】:2018-02-02 08:10:06
【问题描述】:

当我运行 dask.distributed worker 时,任务函数中抛出的任何异常都会传播到调度程序并终止整个作业。有没有办法优雅地失败任务,以便调度程序负责重试(可能在另一个工作人员身上)?

【问题讨论】:

    标签: dask dask-distributed


    【解决方案1】:

    目前 Dask.distributed 调度程序将异常解释为任务的真实值。目前不支持自动重试(截至 2017 年 8 月)。然而,这经常被要求。在不久的将来看到这种变化,我不会感到惊讶。

    同时,我们建议在您的任务中添加重试逻辑。

    def f(*args, **kwargs):
        for i in range(n_retries):
            try:
                # your code
                # return result
            except Exception:
                pass
    
    future = client.submit(f, *args, **kwargs)
    

    【讨论】:

    • 感谢您的及时答复。是的,在没有此类功能的情况下,我们目前正在单个工作人员中实现重试。
    • 现在可以使用吗?distributed.dask.org/en/latest/…?如果是这样,你能分享一个例子吗?
    • 或者,我们可以使用 client.submit(retries=N) 来实现吗?另外,除了失败的地方,有没有办法在工作人员身上尝试失败的任务?我主要担心内存溢出异常。谢谢。
    • 重试关键字也是一个很好的选择(比这个答案更新)。
    • 您可以从任务中引发dask.distributed.Reschedule 异常,调度程序将尝试将其发送到其他地方。不过,这需要您的函数中的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2019-05-16
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2020-05-05
    • 2015-09-25
    相关资源
    最近更新 更多