Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/owenliang/task_schedule

(C++)基于图数据结构与拓扑序列的任务调度demo
https://github.com/owenliang/task_schedule

cpp demo topology

Last synced: about 2 months ago
JSON representation

(C++)基于图数据结构与拓扑序列的任务调度demo

Awesome Lists containing this project

README

        

# 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
是否完成:NO
(当前)依赖这些任务: graph2-job4
(当前)被这些任务依赖:
任务名:graph2-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: 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
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph1-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph1-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph1-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph1-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
---------------
---------------
任务名:graph2-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph2-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1 graph2-job5
任务名:graph2-job5
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖:
---------------
---------------
任务名:graph2-job1
命令:sleep 2
重试次数0
是否完成:NO
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph2-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖: graph2-job1
任务名:graph2-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
---------------
---------------
任务名:graph2-job1
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph2-job2
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph2-job3
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph2-job4
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
任务名:graph2-job5
命令:sleep 2
重试次数0
是否完成:YES
(当前)依赖这些任务:
(当前)被这些任务依赖:
---------------

```