Python 气流计划不正确

Python 气流计划不正确,python,airflow,Python,Airflow,代码: Python版本2.7.x和airflow版本1.5.1 我的dag脚本是这样的 from airflow import DAG from airflow.operators import BashOperator from datetime import datetime, timedelta default_args = { 'owner': 'xyz', 'depends_on_past': False, 'start_date': datetime(2015,10,13),

代码:

Python版本2.7.x和airflow版本1.5.1

我的dag脚本是这样的

from airflow import DAG
from airflow.operators import BashOperator
from datetime import datetime, timedelta


default_args = {
'owner': 'xyz',
'depends_on_past': False,
'start_date': datetime(2015,10,13),
'email': ['xyz@email.in'],
'schedule_interval':timedelta(minutes=5),
'email_on_failure': True,
'email_on_retry': True,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG('testing', default_args=default_args)
run_this_first = BashOperator(task_id='Start1',bash_command='date', dag=dag)
for i in range(5):
    t = BashOperator(task_id="Orders1"+str(i), bash_command='sleep 5',dag=dag)
    t.set_upstream(run_this_first)
由此可以看出,我正在创建一个包含6个任务的DAG,第一个任务(Start1)首先启动,之后所有其他五个任务都启动

目前我已经给了DAG启动之间5分钟的时间延迟

对于第一种类型的所有六项任务,DAG都运行良好,但五分钟后,DAG不会重新启动

已经一个多小时了,DAG还没有重新启动,我真的不知道我是不是错了

如果有人能指出问题所在,那就太好了。我尝试使用
气流测试清除
进行清除,然后同样的事情发生了。它首先运行,然后就停在那里

命令行显示的唯一内容是
获取DAG测试的所有实例

当我改变调度间隔的位置时,它只是在没有任何并行调度间隔的情况下运行。也就是说,在5分钟内,300个或更多的任务实例已经完成。没有5分钟的时间间隔

代码2:

from airflow import DAG
from airflow.operators import BashOperator
from datetime import datetime, timedelta


default_args = {
'owner': 'xyz',
'depends_on_past': False,
'start_date': datetime(2015,10,13),
'email': ['xyz@email.in'],
'email_on_failure': True,
'email_on_retry': True,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG('testing',schedule_interval=timedelta(minutes=5),default_args=default_args)#Schedule here
run_this_first = BashOperator(task_id='Start1',bash_command='date', dag=dag)
for i in range(5):
    t = BashOperator(task_id="Orders1"+str(i), bash_command='sleep 5',dag=dag)
    t.set_upstream(run_this_first)

对于代码2,我想它每分钟运行的原因是:

  • 开始时间为2015-10-13 00:00

  • 时间间隔为5分钟

  • 调度程序的每个心跳(默认为5秒)都将检查DAG

    • 第一次检查:开始日期(未找到最后执行日期)+计划程序 间隔<当前时间?如果是,则将执行DAG并持续 将记录执行时间。(例如2015-10-13 00:00+5分钟<电流?)
    • 下一次心跳的第二次检查:上次执行时间+调度程序 间隔<当前时间?如果是这样,将再次执行DAG
  • 解决方案是将DAG开始日期设置为
    datetime.now()-schedule\u interval

    如果要调试,请执行以下操作:

  • 在settings.py中将LOGGINGLEVEL设置为
    debug

  • 将气流.models.TaskInstance的类方法
    修改为可排队()

  • :

    因为开始时间(2015-10-13 00:00)比现在的时间短,所以会触发气流。它将从2015-10-13 00:00开始运行,当气流调度器每秒检测到一次气流时(即开始日期),但执行日期介于5分钟(任务间隔时间)之间

    请参阅日志名:

    $tree airflow/logs/testing/
    testing/
    |-- Orders10
    |   |-- 2015-10-13T00:00:00
    |   |-- 2015-10-13T00:05:00
    |   -- 2015-10-13T00:10:00
    |-- Orders11
    |   |-- 2015-10-13T00:00:00
    |   |-- 2015-10-13T00:05:00
    |   -- 2015-10-13T00:10:00
    |-- Orders12
    |   |-- 2015-10-13T00:00:00
    |   |-- 2015-10-13T00:05:00
    |   -- 2015-10-13T00:10:00
    |-- Orders13
    |   |-- 2015-10-13T00:00:00
    |   |-- 2015-10-13T00:05:00
    |   -- 2015-10-13T00:10:00
    |-- Orders14
    |   |-- 2015-10-13T00:00:00
    |   |-- 2015-10-13T00:05:00
    |   -- 2015-10-13T00:10:00
    -- Start1
        |-- 2015-10-13T00:00:00
        |-- 2015-10-13T00:05:00
        |-- 2015-10-13T00:10:00
        -- 2015-10-13T00:15:00
    
    请参阅日志的创建时间:

    $ll airflow/logs/testing/Start1
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:50 2015-10-13T00:00:00
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:50 2015-10-13T00:05:00
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:51 2015-10-13T00:10:00
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:52 2015-10-13T00:15:00
    
    此外,您还可以在web UI上看到任务实例:


    您的意思是,它将每五秒钟运行一次,直到执行日期超过当前日期时间,之后它将遵循计划的时间间隔是,这就是我的意思。非常感谢,伙计,但我有两个疑问。我如何从这一秒开始,以一个小时的时间间隔安排一项任务。我可以为未来安排一份工作吗
    $ll airflow/logs/testing/Start1
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:50 2015-10-13T00:00:00
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:50 2015-10-13T00:05:00
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:51 2015-10-13T00:10:00
    -rw-rw-r-- 1 admin admin 4192 Nov  9 14:52 2015-10-13T00:15:00