仅在某些异常时重试Airflow任务实例

时间:2019-06-26 13:59:33

标签: python airflow google-cloud-composer

仅针对某些故障/异常重试Airflow操作员的最佳方法是什么?

例如,假设我有一个Airflow任务,该任务依赖于外部服务的可用性。如果任务执行期间该服务不可用,我想稍后重试(最多3次重试)。对于其他失败,我不想重试。

我目前的方法是使用on_failure_callback并通过解析context["ti"].task.retries在所需的异常上操作context["exception"],但是我认为这很麻烦且难以理解。有更好的选择吗?

1 个答案:

答案 0 :(得分:0)

大多数气流操作员使用Hook类来完成工作。

如果,您可以创建自己的PythonOperator并尝试/捕获要避免的异常并抛出要触发重试的异常,它将无缝地符合气流架构:< / p>

# python operator function
def my_operation():
    try:
        hook = SomeHook()
        hook.use_it()
    catch IgnorableException e:
        pass


# then:
my_operator = PythonOperator(
    task_id='my-operator',
    python_callable=my_operation
)

它使您可以更好地控制操作员和DAG的生命周期。