编辑:我弄明白了我的问题。我没有理解触发运行和立即运行并保持运行并让它完成工作之间的区别。代码很好。
我写了这个简单的程序来计算出气流。它应该打印到文件" hello world",但它会立即执行。有人看到我错了吗?
def print_hello():
f = open('helloword.txt','a')
f.write( 'Hello World!')
f.close()
dag = DAG('hello_world', description='Simple tutorial DAG', schedule_interval='@hourly',
start_date=datetime(2018, 5, 31), catchup=False)
hello_operator = PythonOperator(task_id='hello_task', python_callable=print_hello, dag=dag)
答案 0 :(得分:1)
您的代码对我来说很好。如果关闭DAG,是否会在文件中附加一些行?
我认为您所看到的是回填执行正在运行。你今天把你的开始日期隐含在午夜。因此,气流将在每小时最终运行任务之前赶上并启动这些DAG运行。
答案 1 :(得分:1)
开始日期为2018-05-31
,计划间隔为@hourly
,因此第一次运行的执行日期通常为2018-05-31T00:00:00
,开始日期> =〜{{1 }}
在这种情况下,您已将catchup设置为false,因此只会创建最近的DAG运行。我希望DAG运行现在创建为2018-05-31T01:00:00
。
目前的UTC时间为2018-05-31T21:00:00
。由于开始日期时间戳2018-05-31T22:00:00
已经过去,因此Airflow调度程序将立即安排并启动任务。
如果您希望明天重新开始,可以删除DAG运行和任务实例,然后将开始日期更改为2018-05-31T00:00:00
。如果您选择将来的开始日期,则在这种情况下不会立即运行。
您可以在此处找到有关调度程序如何工作的更多信息: