# task_schedule
## 项目介绍
基于DAG图的调度DEMO,基于图数据结构与拓扑序列理论,实现一个任务调度工具。
## 功能
当前是一个命令行工具,通过JSON文件配置任务依赖关系,即可由工具完成调度。
现阶段只是一个DEMO, 有时间会把调度结果作为JSON输出, 并且利用工具的进程退出码作为调度成功与否的标识, 方便使用.
## 配置
```
{
"maxParallel": 5,
"graph": {
"myGraph": {
"task": [
{
"name": "createFile",
"cmd": "touch /tmp/my_file",
"retry": 2
},
{
"name": "appendFile",
"cmd": "echo hello >> /tmp/my_file",
"deps": ["createFile"]
}
]
}
}
}
```
## 运行与日志
```
./scheduler ./example.json
---------------
任务名:appendFile
SHELL命令:echo hello >> /tmp/my_file
最大重试次数0
是否完成:NO
(当前)依赖这些任务: createFile
(当前)被这些任务依赖:
任务名:createFile
SHELL命令:touch /tmp/my_file
最大重试次数2
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: appendFile
---------------
---------------
任务名:appendFile
SHELL命令:echo hello >> /tmp/my_file
最大重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:createFile
SHELL命令:touch /tmp/my_file
最大重试次数2
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: appendFile
---------------
---------------
任务名:appendFile
SHELL命令:echo hello >> /tmp/my_file
最大重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:createFile
SHELL命令:touch /tmp/my_file
最大重试次数2
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
---------------
```
##
## 原理展示
### 输入
```
/*
* 拓扑1
*
* J O B 1
* / \ \
* V V V
* JOB2 JOB3 JOB5
* \ /
* V V
* JOB4
*/
/**
* 拓扑2
*
* J O B 1
* / | \
* V V V
* JOB2 JOB3 JOB4 <- JOB5
*
*/
```
### 输出
```
---------------
任务名:graph1-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job2 graph1-job3 graph1-job5
(当前)被这些任务依赖:
任务名:graph1-job2
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job4
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job3
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job4
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job4
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job2 graph1-job3
任务名:graph1-job5
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
---------------
---------------
任务名:graph2-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph2-job2 graph2-job3 graph2-job4
(当前)被这些任务依赖:
任务名:graph2-job2
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job3
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job4
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1 graph2-job5
任务名:graph2-job5
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph2-job4
(当前)被这些任务依赖:
---------------
---------------
任务名:graph2-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph2-job3 graph2-job4
(当前)被这些任务依赖:
任务名:graph2-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job3
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job4
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1 graph2-job5
任务名:graph2-job5
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph2-job4
(当前)被这些任务依赖:
---------------
---------------
任务名:graph1-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job2 graph1-job3
(当前)被这些任务依赖:
任务名:graph1-job2
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job4
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job3
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job4
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job4
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job2 graph1-job3
任务名:graph1-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
---------------
---------------
任务名:graph1-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job2 graph1-job3
(当前)被这些任务依赖:
任务名:graph1-job2
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job3
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job2 graph1-job3
任务名:graph1-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
---------------
---------------
任务名:graph1-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务: graph1-job2
(当前)被这些任务依赖:
任务名:graph1-job2
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job2
任务名:graph1-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
---------------
---------------
任务名:graph1-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph1-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
任务名:graph1-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph1-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph1-job1
---------------
---------------
任务名:graph2-job1
命令:sleep 2
重试次数0
是否完成:N
(C++)基于图数据结构与拓扑序列的任务调度demo.zip
176 浏览量
2024-06-16
22:24:29
上传
评论
收藏 51KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/780829b3ac054f9db01766e9f0c0c4aa_m0_74712453.jpg!1)
![avatar-vip](https://csdnimg.cn/release/downloadcmsfe/public/img/user-vip.1c89f3c5.png)
热爱嵌入式的小佳同学
- 粉丝: 8824
- 资源: 1754
最新资源
- Linux思维导图原图
- Java项目-基于SSM+Vue的汉服文化平台网站的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- Python人工智能基于深度学习的农作物病虫害识别项目源码.zip
- 反向编译 ★逆向工程★工具包【TOP升级版】v24.07
- Java项目-基于SSM+Vue的疫情期间医院门诊管理系统的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- Python基于改进YOLO的农作物病害识别系统(部署教程&源码)
- LCD1602液晶microbit扩展包(以修改为支持和兼容LCD2004)
- Python基于改进YOLO的植物病害识别系统(部署教程&源码)
- Java项目-基于SSM+Vue的药源购物网站的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- resource_25-Jun-24.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)