是否有可能在Airflow中获得dag的实际开始时间?从开始时间开始,我指的是dag的第一个任务开始运行的确切时间。
我知道我可以使用宏来获取执行日期。如果使用trigger_dag运行作业,那么我称之为开始时间,但如果作业按日计划运行,则datetime.now().isoformat()
将返回昨天的日期。
我还尝试将def cycleencrypt(string, offset=1, index=0,
listing, first, last):
"""Description
:param string: description
:param offset: description
:param index: description
:param listing: description
:param first: description
:param last: description
:return description
"""
offset = offsetctrl(offset)
if string >= ord(first) and string <= ord(last):
string += offset
while string > ord(last):
string = ord(first) + (string - ord(last) - 1)
listing[index] = chr(string)
放在dag代码的正文中,然后将其传递给任务,但这似乎返回了首次调用任务的时间,而不是dag本身启动的时间。
答案 0 :(得分:4)
这是一个古老的问题,但我正在回答,因为被接受的答案对我不起作用。如果DAG运行失败并且重试某些任务,{{ dag_run.start_date }}
会发生变化。
解决方案是使用:{{ dag_run.get_task_instance('start').start_date }}
,它使用第一个任务的开始日期(具有task_id:start
的DummyOperator任务)。
答案 1 :(得分:3)
{{ dag_run.start_date }}
提供dag的实际开始时间
答案 2 :(得分:0)
我正按照你所说的方式:
从开始时间开始,我的意思是dag的第一个任务开始运行的确切时间
您仍然可以在第一项任务中使用宏执行此操作,请尝试使用此{{ task.start_date }}
所有变量都可以在TaskInstance类中找到: https://github.com/apache/incubator-airflow/blob/master/airflow/models.py#L746