Python 如何根据气流中的不同天数为同一DAG设置不同的时间表

Python 如何根据气流中的不同天数为同一DAG设置不同的时间表,python,cron,airflow,airflow-scheduler,Python,Cron,Airflow,Airflow Scheduler,我有两个像这样定义的DAG my_dag= DAG('my_dag_thu_and_friday', catchup=False, default_args=default_args, schedule_interval='0 12,13,15,19 * * THU,FRI' ) 它们运行相同的运算符和相同的代码,但只是根据是星期四/星期五还是星期六/星期日而按不同的时间表运行。是否有一种方法可以指定cron

我有两个像这样定义的DAG

my_dag= DAG('my_dag_thu_and_friday',
           catchup=False,
           default_args=default_args,
           schedule_interval='0 12,13,15,19 * * THU,FRI'
         ) 
它们运行相同的运算符和相同的代码,但只是根据是星期四/星期五还是星期六/星期日而按不同的时间表运行。是否有一种方法可以指定cron间隔,使我只有一个DAG有条件地处理调度


感谢

目前还没有干净简单的解决方案,但是我们将解决这个问题,因此在未来的气流版本中,这应该变得很容易

目前,您的选择是:

  • 尝试使用cron
    '012,13,15,17,19**THU,FRI,SAT,SUN'
    放置分支运算符来创建1个DAG,以确定是否应执行
    DummyOperator
    或您的运算符。因此,例如,在
    THU
    气流中运行
    17
    ,将执行DummyOperator(因此不执行任何操作)
  • 像你已经做的那样,和2只狗呆在一起
  • 保留2个DAG,但使用,从而避免需要维护重复的代码。您不必维护重复的代码。 可以编写返回DAG对象的函数:

  • 谢谢选项3听起来不错,我会用它
    my_dag= DAG('my_dag_sat_and_sun',
               catchup=False,
               default_args=default_args,
               schedule_interval='0 13,17 * * SAT,SUN'
             ) 
    
    def create_dag(dag_id, schedule, default_args):
        dag = DAG(
            dag_id,
            schedule_interval=schedule,
            default_args=default_args)
        with dag:
            task = BashOperator(task_id='my_task')
        return dag
    
    list_of_dags = [
        ('my_dag_thu_and_friday', '0 12,13,15,19 * * THU,FRI'),
        ('my_dag_sat_and_sun', '0 13,17 * * SAT,SUN')
    ]
    
    default_args = {'owner': 'airflow', ...}
    
    for dag_item in list_of_dags:
        dag_id = dag_item[0]
        dag_schedule = dag_item[1]
        globals()[dag_id] = create_dag(
            dag_id,
            dag_schedule,
            default_args
        )