Airflow 在数据库中以随机顺序运行任务

Airflow 在数据库中以随机顺序运行任务,airflow,airflow-scheduler,Airflow,Airflow Scheduler,目前,我有一个每天都需要在同一时间运行的任务列表,但是它们彼此独立。我知道我可以将它们设置为按特定顺序运行,即t1>>t2>>t3,但是我希望顺序是随机的,因此它们完成的顺序并不总是相同的。如何以随机顺序运行气流任务列表?您刚才说过它们彼此独立,为什么不同时运行它们呢 这可以通过不使用任何换档操纵器来实现,例如: from airflow.models import DAG from airflow.operators.dummy_operator import DummyOperator f

目前,我有一个每天都需要在同一时间运行的任务列表,但是它们彼此独立。我知道我可以将它们设置为按特定顺序运行,即
t1>>t2>>t3
,但是我希望顺序是随机的,因此它们完成的顺序并不总是相同的。如何以随机顺序运行气流任务列表?

您刚才说过它们彼此独立,为什么不同时运行它们呢

这可以通过不使用任何换档操纵器来实现,例如:

from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.dates import days_ago

args = {
    'owner': 'Airflow',
    'start_date': days_ago(0)
}

dag = DAG(dag_id='example_random_task', default_args=args, max_active_runs=0, catchup=False)

first_operator = DummyOperator(task_id='{}_operator'.format("first"), dag=dag)
second_operator = DummyOperator(task_id='{}_operator'.format("second"), dag=dag)
third_operator = DummyOperator(task_id='{}_operator'.format("third"), dag=dag)
但是,如果您真的希望任务的顺序是随机的,并使它们可以在某种随机队列中执行,那么您可以将所有任务添加到一个列表中,然后将它们洗牌。然后迭代任务并使当前任务取决于下一个任务,例如:

要执行此操作,请使用将列表就地洗牌的
random.shuffle()

from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.dates import days_ago
import random

args = {
    'owner': 'Airflow',
    'start_date': days_ago(0)
}

dag = DAG(dag_id='example_random_task', default_args=args, max_active_runs=0, catchup=False)

first_operator = DummyOperator(task_id='{}_operator'.format("first"), dag=dag)
second_operator = DummyOperator(task_id='{}_operator'.format("second"), dag=dag)
third_operator = DummyOperator(task_id='{}_operator'.format("third"), dag=dag)

tasks_list = [first_operator, second_operator, third_operator]
random.shuffle(tasks_list)

i = 0
while i < len(tasks_list) - 1:
    tasks_list[i] << tasks_list[i + 1]
    i += 1
从afflow.models导入DAG
从airflow.operators.dummy_operator导入dummy operator
从airflow.utils.dates导入天\u
随机输入
args={
“所有者”:“气流”,
“开始日期”:天之前(0)
}
dag=dag(dag\u id='example\u random\u task',默认参数=args,最大活动运行次数=0,catchup=False)
第一个运算符=DummyOperator(任务id='{}}\u运算符'.格式(“第一”),dag=dag)
第二个_运算符=dummy运算符(任务_id='{}_运算符'.格式(“第二”),dag=dag)
第三个_运算符=dummy运算符(任务_id='{}_运算符'.format(“第三”),dag=dag)
任务\u列表=[第一个\u运算符、第二个\u运算符、第三个\u运算符]
随机移动(任务列表)
i=0
而i任务列表[i]您刚才说过它们彼此独立,为什么不同时运行它们呢

这可以通过不使用任何换档操纵器来实现,例如:

from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.dates import days_ago

args = {
    'owner': 'Airflow',
    'start_date': days_ago(0)
}

dag = DAG(dag_id='example_random_task', default_args=args, max_active_runs=0, catchup=False)

first_operator = DummyOperator(task_id='{}_operator'.format("first"), dag=dag)
second_operator = DummyOperator(task_id='{}_operator'.format("second"), dag=dag)
third_operator = DummyOperator(task_id='{}_operator'.format("third"), dag=dag)
但是,如果您真的希望任务的顺序是随机的,并使它们可以在某种随机队列中执行,那么您可以将所有任务添加到一个列表中,然后将它们洗牌。然后迭代任务并使当前任务取决于下一个任务,例如:

要执行此操作,请使用将列表就地洗牌的
random.shuffle()

from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.dates import days_ago
import random

args = {
    'owner': 'Airflow',
    'start_date': days_ago(0)
}

dag = DAG(dag_id='example_random_task', default_args=args, max_active_runs=0, catchup=False)

first_operator = DummyOperator(task_id='{}_operator'.format("first"), dag=dag)
second_operator = DummyOperator(task_id='{}_operator'.format("second"), dag=dag)
third_operator = DummyOperator(task_id='{}_operator'.format("third"), dag=dag)

tasks_list = [first_operator, second_operator, third_operator]
random.shuffle(tasks_list)

i = 0
while i < len(tasks_list) - 1:
    tasks_list[i] << tasks_list[i + 1]
    i += 1
从afflow.models导入DAG
从airflow.operators.dummy_operator导入dummy operator
从airflow.utils.dates导入天\u
随机输入
args={
“所有者”:“气流”,
“开始日期”:天之前(0)
}
dag=dag(dag\u id='example\u random\u task',默认参数=args,最大活动运行次数=0,catchup=False)
第一个运算符=DummyOperator(任务id='{}}\u运算符'.格式(“第一”),dag=dag)
第二个_运算符=dummy运算符(任务_id='{}_运算符'.格式(“第二”),dag=dag)
第三个_运算符=dummy运算符(任务_id='{}_运算符'.format(“第三”),dag=dag)
任务\u列表=[第一个\u运算符、第二个\u运算符、第三个\u运算符]
随机移动(任务列表)
i=0
而i