python dag调度系统开发_DAG 任务调度实现以及优化

本文介绍了如何使用Python实现DAG任务调度系统,包括有向图的构建、拓扑排序检测环、stage优化以及测试执行过程。通过优化,减少了线程上下文切换,提升了执行效率。
摘要由CSDN通过智能技术生成

DAG Task 任务调度算法 实现

github:https://github.com/smartxing/algorithm

1 有向图的构建

DAG dag = new DAG();

dag.addVertex("A");

dag.addVertex("B");

dag.addVertex("C");

dag.addVertex("D");

dag.addEdge("A", "B");

dag.addEdge("A", "C");

System.out.println(dag);

2 拓扑排序检测图中是否有环

public boolean isCircularity() {

Set set = inDegree.keySet();

//入度表

Map inDegree = set.stream().collect(Collectors

.toMap(k -> k, k -> new AtomicInteger(this.inDegree.get(k).size())));

//入度为0的节点

Set sources = getSources();

LinkedList queue = new LinkedList();

queue.addAll(sources);

while (!queue.isEmpty()) {

Object o = queue.removeFirst();

outDegree.get(o)

.forEach(so -> {

if (inDegree.get(so).decrementAndGet() == 0) {

queue.add(so);

}

});

}

return inDegree.values().stream().filter(x -> x.intValue() > 0).count() > 0;

}

3 stage优化

eg

如果任务存在如下的关系 , task1 执行完后执行 task2 ,task2 执行完后执行task3 ...

Task1 -> Task2 -> Task

Python中,可以使用一些库来进行DAG调度,例如Airflow、Luigi和Dask等。这些库提供了方便的工具和接口,帮助您定义、调度和执行DAG任务。 以下是一个使用Airflow进行DAG调度的简单示例: ```python from airflow import DAG from airflow.operators.python_operator import PythonOperator from datetime import datetime def task1(): print("Task 1 executed.") def task2(): print("Task 2 executed.") def task3(): print("Task 3 executed.") # 定义DAG dag = DAG( 'my_dag', start_date=datetime(2022, 1, 1), schedule_interval='@daily' ) # 定义任务 task_1 = PythonOperator( task_id='task_1', python_callable=task1, dag=dag ) task_2 = PythonOperator( task_id='task_2', python_callable=task2, dag=dag ) task_3 = PythonOperator( task_id='task_3', python_callable=task3, dag=dag ) # 定义任务依赖关系 task_1 >> task_2 task_1 >> task_3 ``` 在这个示例中,我们使用Airflow库创建了一个名为"my_dag"的DAG,并定义了三个任务(task1、task2和task3)。我们使用PythonOperator来定义每个任务的执行逻辑,并将它们与DAG相关联。 在任务定义后,我们可以使用`>>`操作符来指定任务之间的依赖关系。例如,`task_1 >> task_2`表示task_2依赖于task_1的完成。 您可以根据实际需求进行更复杂的DAG调度设置,例如设置任务的执行顺序、并行执行任务等。 这只是一个简单的示例,您可以根据实际情况和需求进行更多的定制和配置。 希望对您有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值