[英]Airflow ExternalTaskSensor manually triggered
我创建了两个要手动触发的 dags schedule_interval=None
。
首先,我触发了“External_test_A”,它应该一直挂起,直到“External_test_B”不会被触发。 过了一会儿(2 分钟后),我触发了“External_test_B”DAG,它只运行一个任务first_task
。
当任务: first_task
成功时,从“External_test_A”中探查Poking for External_test_B.first_task
应该完成,返回成功并从“External_test_A”运行second_task
任务。
我陷入了即使first_task
成功,“External_test_A”中的Poking for...
仍在继续的情况。
外部测试A:
default_args = {
'owner': 'airflow',
'start_date': pendulum.yesterday().astimezone('US/Eastern')
}
dag = DAG(
dag_id='External_test_A',
default_args=default_args,
schedule_interval=None
)
def do_second_task():
print('Second task is done')
sensor = ExternalTaskSensor(
task_id='wait_for_the_first_task_to_be_completed',
external_dag_id='External_test_B',
external_task_id='first_task',
execution_delta=timedelta(minutes=3),
dag=dag)
t2 = PythonOperator(
task_id='second_task',
python_callable=do_second_task,
dag=dag)
sensor >> t2
if __name__ == "__main__":
dag.cli()
外部测试B:
default_args = {
'owner': 'airflow',
'start_date': pendulum.yesterday().astimezone('US/Eastern')
}
dag = DAG(
dag_id='External_test_B',
default_args=default_args,
schedule_interval=None
)
t1 = DummyOperator(task_id='first_task', dag=dag)
t1
if __name__ == "__main__":
dag.cli()
你们中的一些人能告诉我我做错了什么吗? 如何仅使用手动触发来解决来自两个不同 DAG 的两个任务之间的通信问题?
经过大量研究,除非您编写自己的 class 来完成这项工作,否则无法使用手动触发来执行此操作。 两个 dag 都必须有一个具有相同开始日期的计划间隔,并且您需要在外部传感器定义中提及 execution_delta。
由于您的两个 dag 都是手动触发的,因此无法解决您的问题。 我建议您尝试在一个 DAG 中执行此操作...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.