Apache Airflow多分支指向同一任务时仅第二个分支生效问题
问题分析
你的问题核心在于translations_pending_task被两个分支任务(check_pending_translation和check_pending_translation2)作为下游依赖,但Airflow默认触发规则all_success要求所有上游任务都成功完成才会执行该任务:
- 当
check_pending_translation返回translations_pending时,会触发translations_pending_task,同时跳过xls_to_features_task及其后续任务,此时check_pending_translation2处于**跳过(skipped)**状态。由于默认规则要求所有上游成功,translations_pending_task因存在跳过的上游而被整体跳过。 - 当流程走到
check_pending_translation2并返回translations_pending时,check_pending_translation已成功执行(选择了xls_to_features分支),两个上游均满足all_success要求,因此translations_pending_task正常执行。
解决方案
修改translations_pending_task的触发规则为one_success,只要任意一个上游任务成功触发,该任务就会执行:
# 先导入TriggerRule from airflow.utils.trigger_rule import TriggerRule translations_pending_task = EmailOperator( task_id="translations_pending", to=emails, subject="Vsehub translations pending", html_content=translation_instructions, files=[data['pending_feature_translations_file_path']], trigger_rule=TriggerRule.ONE_SUCCESS # 添加触发规则配置 )
额外验证点
- 确认
check_files分支函数返回的translations_pending与translations_pending_task的task_id完全一致,无拼写或大小写错误 - 若使用Airflow 2.x以下版本,建议升级到稳定2.x版本,旧版本对多分支指向同一任务的处理存在已知bug
内容的提问来源于stack exchange,提问作者Farn Black
相关产品推荐
相关产品推荐

