| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
中文 | English Readme | deepwiki
CGraph is a cross-platform Directed Acyclic Graph framework based on pure C++ without any 3rd-party dependencies.
You, with it, can build your own operators simply, and describe any running schedules as you need, such as dependence, parallelling, aggregation, conditional and so on. Python APIs are also supported to build your pipeline.
Tutorials and contact information are shown as follows. Please get in touch with us for free if you need more about this repository.
CGraph中文名为【色丶图】,是一套无任何第三方依赖的跨平台图流程执行框架。通过GPipeline(流水线)底层调度,提供了包含依赖元素依次执行、非依赖元素并发执行,支持暂停、恢复、超时设定的 eDAG 调度功能。
使用者只需继承GNode(节点)类,实现子类的run()方法,并根据需要设定依赖关系,即可实现任务的图化执行或流水线执行。还可以通过设定各种包含多节点信息的GGroup(组),自行控制图的条件判断、循环和并发执行逻辑。
本工程使用纯C++11标准库编写,无任何第三方依赖,兼容MacOS、Linux、Windows和Android系统。支持本地编译和二次开发,并且提供Python版本:pycgraph。编译和安装方法,请参考 CGraph 编译说明
详细功能介绍和用法,请参考 一面之猿网 中的文章内容。相关视频在B站持续更新中,欢迎观看和交流:
C++ 版本
#include "CGraph.h"
using namespace CGraph;
class MyNode1 : public GNode {
public:
CStatus run() override {
printf("[%s], sleep for 1 second ...\n", this->getName().c_str());
CGRAPH_SLEEP_SECOND(1)
return CStatus();
}
};
class MyNode2 : public GNode {
public:
CStatus run() override {
printf("[%s], sleep for 2 second ...\n", this->getName().c_str());
CGRAPH_SLEEP_SECOND(2)
return CStatus();
}
};
int main() {
/* 创建一个流水线,用于设定和执行流图信息 */
GPipelinePtr pipeline = GPipelineFactory::create();
GElementPtr a, b, c, d = nullptr;
/* 注册节点之间的依赖关系 */
pipeline->registerGElement<MyNode1>(&a, {}, "nodeA");
pipeline->registerGElement<MyNode2>(&b, {a}, "nodeB");
pipeline->registerGElement<MyNode1>(&c, {a}, "nodeC");
pipeline->registerGElement<MyNode2>(&d, {b, c}, "nodeD");
/* 执行流图框架 */
pipeline->process();
/* 清空流水线中所有的资源 */
GPipelineFactory::remove(pipeline);
return 0;
}
如上图所示,图结构执行的时候,首先执行a节点。a节点执行完毕后,并行执行b和c节点。b和c节点全部执行完毕后,再执行d节点。
Python 版本
# pip install pycgraph
import time
from datetime import datetime
from pycgraph import GNode, GPipeline, CStatus
class MyNode1(GNode):
def run(self):
print("[{0}] {1}, enter MyNode1 run function. Sleep for 1 second ... ".format(datetime.now(), self.getName()))
time.sleep(1)
return CStatus()
class MyNode2(GNode):
def run(self):
print("[{0}] {1}, enter MyNode2 run function. Sleep for 2 second ... ".format(datetime.now(), self.getName()))
time.sleep(2)
return CStatus()
if __name__ == '__main__':
pipeline = GPipeline()
a, b, c, d = MyNode1(), MyNode2(), MyNode1(), MyNode2()
pipeline.registerGElement(a, set(), "nodeA")
pipeline.registerGElement(b, {a}, "nodeB")
pipeline.registerGElement(c, {a}, "nodeC")
pipeline.registerGElement(d, {b, c}, "nodeD")
pipeline.process()其他版本
[2021.05.04 - v1.0.0 - Chunel]
[2021.05.09 - v1.1.0 - Chunel]
[2021.05.18 - v1.1.1 - Chunel]
[2021.05.23 - v1.2.0 - Chunel]
[2021.05.29 - v1.3.0 - Chunel]
[2021.06.14 - v1.4.0 - Chunel]
[2021.06.20 - v1.4.1 - Chunel]
[2021.06.24 - v1.5.0 - Chunel]
[2021.07.07 - v1.5.1 - Chunel]
[2021.07.11 - v1.5.2 - Chunel]
[2021.07.31 - v1.5.3 - Chunel]
[2021.08.29 - v1.6.0 - Chunel]
[2021.09.19 - v1.6.1 - Chunel]
[2021.09.29 - v1.7.0 - Chunel]
[2021.10.07 - v1.7.1 - Chunel]
[2021.11.01 - v1.8.0 - Chunel]
[2021.12.18 - v1.8.1 - Chunel]
[2022.01.02 - v1.8.2 - Chunel]
[2022.01.23 - v1.8.3 - Chunel]
[2022.01.31 - v1.8.4 - Chunel]
[2022.02.03 - v1.8.5 - Chunel]
[2022.04.03 - v1.8.6 - Chunel]
[2022.04.05 - v2.0.0 - Chunel]
[2022.05.01 - v2.0.1 - Chunel]
[2022.05.29 - v2.1.0 - Chunel]
[2022.10.03 - v2.1.1 - Chunel]
[2022.11.03 - v2.2.0 - Chunel]
[2022.12.24 - v2.2.1 - Chunel]
[2022.12.25 - v2.2.2 - yeshenyong]
[2022.12.30 - v2.2.3 - Chunel]
[2023.01.21 - v2.3.0 - Chunel]
[2023.01.25 - v2.3.1 - Chunel]
[2023.02.10 - v2.3.2 - Chunel]
[2023.02.12 - v2.3.3 - yeshenyong, Chunel]
[2023.02.22 - v2.3.4 - Chunel]
[2023.03.25 - v2.4.0 - woodx, Chunel]
[2023.05.05 - v2.4.1 - Chunel]
[2023.06.17 - v2.4.2 - Chunel]
[2023.07.12 - v2.4.3 - Chunel]
[2023.09.05 - v2.5.0 - Chunel]
[2023.09.15 - v2.5.1 - Chunel]
[2023.11.06 - v2.5.2 - Chunel]
[2023.11.15 - v2.5.3 - Chunel]
[2024.01.05 - v2.5.4 - Chunel]
[2024.07.18 - v2.6.0 - PaPaPig-Melody, Chunel]
[2024.09.17 - v2.6.1 - Chunel]
[2024.11.16 - v2.6.2 - Chunel]
[2025.03.16 - v3.0.0 - Chunel]
[2025.05.04 - v3.1.0 - Chunel]
[2025.06.15 - v3.1.1 - Chunel]
[2025.09.06 - v3.1.2 - Chunel]
[2025.11.08 - v3.2.2 - Chunel]
[2026.03.24 - v3.2.3 - Chunel]
[2026.05.10 - v3.2.4 - Chunel]
[2026.08.15 - v3.2.5 - Chunel]
| Back | FazBrowse Home | New Git URL |