气流:如何安排在不同时间的问题?

时间:2019-12-27 16:08:05

标签: airflow airflow-scheduler

例如,我想每天安排一次故障,例如:

  • 星期一在16H
  • 星期二9H
  • 星期三10H
  • ...
  • 星期一15H
  • 星期二12H
  • 等...

我该如何实现?

2 个答案:

答案 0 :(得分:2)

如何添加一个延迟步骤(具有随机睡眠间隔),并在实际做某事之前安排它?

例如

def _delay_dag():
    import random
    import time
    delay_by = random.randint(0,60*60*6) #e.g. to delay up to 6h from schedule time
    print(f'Delaying start by {delay_by} seconds..')
    time.sleep(delay_by)
    return True

def _do_something(ti, *kwargs):
    pass
    
with DAG('my_DAG_with_random_start', 
         schedule_interval='@daily', 
         tags=['test','random_start'],
         default_args=default_args) as dag:
    
    delay_dag = PythonOperator(
        task_id = 'delay_dag',
        python_callable=_delay_dag
    )

    do_something = PythonOperator(
        task_id = 'do_something',
        provide_context=True,
        python_callable=_do_something
    )
    
    delay_dag >> do_something

答案 1 :(得分:1)

如果您希望每天随机安排一次dag,请编写python帮助程序代码。 在定义dag之前,在dag代码中,放入种子随机数(随日期变化),以创建伪随机数。

在此示例中,我将完整日期转换为数字日期,但是您可以使用任何喜欢的方法。

类似下面的代码应该可以工作。

random.seed(int(datetime.date.today().strftime('%Y%m%d')))    
randomCronString="* {} * * *".format(random.randint(0,24))
dag=Dag('TestDag,schedule_interval=randomCronString,default_args=args, catchup=False)