簡體   English   中英

Airflow ExternalTaskSensor 手動觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM