Python 仅在某些异常情况下重试任务实例

Python 仅在某些异常情况下重试任务实例,python,airflow,google-cloud-composer,Python,Airflow,Google Cloud Composer,仅在某些故障/异常情况下重试气流操作员的最佳方法是什么 例如,假设我有一个气流任务,它依赖于外部服务的可用性。如果此服务在任务执行期间变得不可用,我希望稍后重试(最多重试3次)。对于其他故障,我不想重试 我目前的方法是使用 OnFuffuleCyrase,并操纵上下文[Ti ]。任务。通过解析上下文[“异常”] < /代码>,在期望的异常上重试< /代码>,但我认为这是混乱和难以理解的。有更好的选择吗?大多数airflow的操作员使用挂钩类来完成工作 如果您可以创建自己的PythonOperat

仅在某些故障/异常情况下重试气流操作员的最佳方法是什么

例如,假设我有一个气流任务,它依赖于外部服务的可用性。如果此服务在任务执行期间变得不可用,我希望稍后重试(最多重试3次)。对于其他故障,我不想重试


我目前的方法是使用<代码> OnFuffuleCyrase<代码>,并操纵<代码>上下文[Ti ]。任务。通过解析<代码>上下文[“异常”] < /代码>,在期望的异常上重试< /代码>,但我认为这是混乱和难以理解的。有更好的选择吗?

大多数airflow的操作员使用
挂钩类来完成工作

如果您可以创建自己的
PythonOperator
,尝试/捕获您想要避免的异常,并抛出您想要触发重试的异常,那么它将无缝地符合以下要求:

#python运算符函数
定义my_操作():
尝试:
hook=SomeHook()
hook.use_it()
捕获忽略异常e:
通过
#然后:
my_操作符=蟒蛇操作符(
任务\u id='my-operator',
python\u callable=my\u操作
)

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

您可以使用一个传感器来检查可用性并将气流任务添加到下游。通过正确配置poke_间隔和超时,您可以实现您想要的准确重试,我可以在之前检查服务是否可用。但是,我的任务需要一段时间才能执行,因此可能只有在任务执行期间服务才会停止。昨天我问了一个类似的问题(甚至可能重复),我找到了一种方法。