【问题标题】:Airflow sensor task only wait for a certain period气流传感器任务只等待一段时间
【发布时间】:2021-06-04 12:53:12
【问题描述】:

我正在尝试弄清楚如何实现工作流,以便传感器任务等待外部 dag 完成,只等待一定天数。这是一项日常工作,所以我希望传感器工作等待 3 天,然后在第四天发送一封电子邮件,然后等待或执行其他任务。

有人可以帮助阐明如何实现这一目标吗?另外,我们如何将“天数计数器”从一天传递到另一天?非常感谢您的帮助。

【问题讨论】:

    标签: python airflow-scheduler airflow


    【解决方案1】:

    您可以将ExternalTaskSensor 与以下配置一起使用:

    • timeout = 3 * 24 * 60 * 60 - 3 天(以秒为单位),之后传感器将失效
    • poke_interval = 12 * 60 * 60 - 传感器检查间隔 12 小时,您可以将其调整为每小时检查一次。当您检查外部 dag 状态时,它将减少次数
    • mode = "reschedule" - 这样传感器不会占用 3 天的工作槽,它将被调度,执行,如果不满足条件,它将被重新调度到下一个 poke_interval 秒执行。将此模式用于长时间运行的任务是一种很好的做法。

    此外,您可以将等待的 DAG 构建为 wait_task >> [success_task , fail_task] where

    • wait_task 是您的传感器
    • success_task 有触发规则all_success 并在传感器成功时遵循
    • fail_taskall_failed 触发规则并处理传感器最终返回 false 或超时时的场景

    【讨论】:

    • 除了需要感知 x 天之外,ExternalTask​​Sensor 还具有execution_date_fn,可用于感知远程 dag 的某些执行。例如,将一个函数附加到此参数,该函数返回远程 dag 的三个执行日期列表。
    • @Tomasz Urbaszek 谢谢,但问题是我希望传感器只发送一封电子邮件并继续等待(例如通知 SLA 已通过的电子邮件)。如何/在哪里可以添加此功能?
    • 我想我想要实现的是可以选择不time out
    • @user4046073 在这种情况下将超时设置为例如 2 周或 float('inf')。但在这种情况下,请记住使用reschedule 模式。
    • 在我看来,一般来说,“总是运行任务”并不是最好的模式。但是,是的,您可以将超时设置为float('inf'),这样它就永远不会超时,如果您不设置它,则将使用默认值 7 天。对于运行时间超过一分钟的内容,始终建议使用reschedule 模式。
    猜你喜欢
    • 2021-12-31
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多