Airflow 以编程方式清除任务实例的状态

Airflow 以编程方式清除任务实例的状态,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我想在DAG A完成执行时清除DAG B中的任务。A和B都是计划的DAG 是否有任何运算符/方法可以清除任务状态并以编程方式重新运行DAG B 我知道使用和Web UI选项来清除任务 是一个非常有用的地方,可以窥探SQLAlchemy气流的魔力 命令被执行 从源头上看,你可以 复制它(假设您还想稍微修改一下功能) 或者只需从airflow.bin import cli执行,并直接调用所需的函数 由于我的目标是在DAG A完成执行时重新运行DAG B,因此我最终使用Bash运算符清除了

我想在DAG A完成执行时清除DAG B中的任务。A和B都是计划的DAG

是否有任何
运算符
/方法可以清除任务状态并以编程方式重新运行DAG B


我知道使用和Web UI选项来清除任务

  • 是一个非常有用的地方,可以窥探
    SQLAlchemy
    气流的魔力
  • 命令被执行
  • 从源头上看,你可以
    • 复制它(假设您还想稍微修改一下功能)
    • 或者只需从airflow.bin import cli执行
      ,并直接调用所需的函数

由于我的目标是在DAG A完成执行时重新运行DAG B,因此我最终使用Bash运算符清除了DAG B:

# Clear the tasks in another dag
last_task = BashOperator(
    task_id='last_task',
    bash_command= 'airflow clear example_target_dag -c ',
    dag=dag)

first_task >> last_task

我建议远离这里

与通过BashOperator和/或CLI模块相比,DAG/tasks的气流功能在引用对象时更好地公开

将名为“clear_dag_b”的python操作添加到dag a,该操作从dags文件夹(模块)导入dag_b,如下所示:

from dags.dag_b import dag as dag_b

def clear_dag_b(**context):
   exec_date = context[some date object, I forget the name]
   dag_b.clear(start_date=exec_date, end_date=exec_date) 
重要如果出于某种原因,不将dag\u b计划时间与开始日期/结束日期进行匹配或重叠,则clear()操作将错过dag执行。本例假设dagAB计划相同,并且当A执行日X时,您只想从B清除日X

在清除之前,检查dag_b是否已经运行可能是有意义的:

dab_b_run = dag_b.get_dagrun(exec_date) # returns None or a dag_run object

尤其是当您需要使用cli中可用的那些标志时,这种方法效果更好,例如
下游
到源文件的链接断开,下面是工作链接
dab_b_run = dag_b.get_dagrun(exec_date) # returns None or a dag_run object