仅针对某些故障/异常重试Airflow操作员的最佳方法是什么?
例如,假设我有一个Airflow任务,该任务依赖于外部服务的可用性。如果任务执行期间该服务不可用,我想稍后重试(最多3次重试)。对于其他失败,我不想重试。
我目前的方法是使用on_failure_callback
并通过解析context["ti"].task.retries
在所需的异常上操作context["exception"]
,但是我认为这很麻烦且难以理解。有更好的选择吗?
答案 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的生命周期。