簡體   English   中英

Airflow 跨 dag 依賴

[英]Airflow cross dag dependency

我正在嘗試實現兩個 dag 之間的依賴關系:parent_dag 和 child_dag。 parent dag 有兩個虛擬任務:leave_work、cook_dinner 子 dag 有三個任務:wait_for_dinner、have_dinner、play_with_food

wait_for_dinner 使用 external_task_sensor,external_dag_id 作為 parent_dag,external_task_id 作為 cook_dinner。 兩個 dag 的 start_date 和 schedule_interval 相同。

當 parent_dag 完成時, wait_for_dinner 應該成功退出並且下一個任務應該運行,但在我的情況下它沒有發生。 (如果 dag 沒有被調度,它工作正常,即 schedule_interval = @once)如果 dag 被調度,那么 wait_for_dinner 將永遠運行 state。 它沒有監聽 parent_dag 成功。

請幫我解決這個問題。

代碼片段:

父代:

dag = DAG(
    'Parent_dag', 
    default_args=default_args, 
    start_date = convert_to_utc(1606712300), 
    schedule_interval=datetime.timedelta(minutes = 5),
    is_paused_upon_creation = False,
    catchup = False
    )

leave_work = DummyOperator(
    task_id='leave_work',
    dag=dag,
)
cook_dinner = DummyOperator(
    task_id='cook_dinner',
    dag=dag,
)

leave_work >> cook_dinner

child_dag:

dag = DAG(
    'Child_dag', 
    default_args=default_args,
    start_date = convert_to_utc(1606712300), 
    schedule_interval=datetime.timedelta(minutes=5),
    is_paused_upon_creation = False,
    catchup = False
    )

wait_for_dinner = ExternalTaskSensor(
    task_id='wait_for_dinner',
    external_dag_id='Parent_dag',
    external_task_id='cook_dinner',
    mode = "reschedule",
    timeout = 3600,
    dag = dag
)

have_dinner = DummyOperator(
    task_id='have_dinner',
    dag=dag,
)
play_with_food = DummyOperator(
    task_id='play_with_food',
    dag=dag,
)

wait_for_dinner >> have_dinner
wait_for_dinner >> play_with_food

當我想從另一個開始一個 dag 時,我在父級中使用TriggerDagRunOperator ,而不是在子級中使用ExternalTaskSensor Sensor。 TriggerDagRunOperator更可靠。

看看 Airflow 2.0 中新版本的 TriggerDagRunOperator,比以前簡單多了。
在這里查看我的視頻https://youtu.be/8uKW0mPWmCk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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