Chinese Readme | 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.
The Chinese name of CGraph is "Se丶Tu". It is a cross-platform graph flow execution framework without any third-party dependencies. Through the underlying scheduling of GPipeline, it provides eDAG scheduling features including sequential execution of dependent elements, concurrent execution of independent elements, pause, resume, and timeout settings.
Users only need to inherit from the GNode class, implement the run() method in the subclass, and set dependencies as needed to execute tasks as a graph or as a pipeline. Users can also configure different GGroups containing multiple nodes to control conditional judgment, loop, and concurrent execution logic by themselves.
This project is written with only the C++11 standard library and has no third-party dependencies. It is compatible with MacOS, Linux, Windows, and Android. It supports local compilation and secondary development, and also provides a Python version: pycgraph. For compilation and installation, please refer to CGraph Compile Guide
For detailed feature introductions and usage, please refer to the articles on Chunel's Blog. Related videos are continuously updated on Bilibili. Welcome to watch and discuss:
- Bilibili Video: CGraph Getting Started
- Bilibili Video: CGraph Features
- A complete introduction to all terms and feature modules in the CGraph project
- Detailed explanations of each feature's usage scenarios, usage methods, and solved problems with real coding processes
- Suitable for users who want to fully understand CGraph features and get started quickly
- Suitable for users interested in multithreaded programming
- Bilibili Video: CGraph Applications
- Bilibili Video: CGraph Sharing
C++ Version
#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() {
/* Create a pipeline for configuring and executing graph flow information */
GPipelinePtr pipeline = GPipelineFactory::create();
GElementPtr a, b, c, d = nullptr;
/* Register dependencies between nodes */
pipeline->registerGElement<MyNode1>(&a, {}, "nodeA");
pipeline->registerGElement<MyNode2>(&b, {a}, "nodeB");
pipeline->registerGElement<MyNode1>(&c, {a}, "nodeC");
pipeline->registerGElement<MyNode2>(&d, {b, c}, "nodeD");
/* Execute the graph flow framework */
pipeline->process();
/* Clear all resources in the pipeline */
GPipelineFactory::remove(pipeline);
return 0;
}
As shown above, when the graph structure is executed, node a runs first. After node a finishes, nodes b and c run in parallel. After both b and c finish, node d runs.
Python Version
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()Other Versions
- CsCGraph : A CSharp native, CGraph-API-liked DAG project
- JaCGraph : A Java native, CGraph-API-liked DAG project
- GoCGraph : A Go native, CGraph-API-liked DAG project
- CGraph-lite : A one-header-only, CGraph-API-liked DAG project, lite version by C++
- A simple implementation of a graph framework - execution logic
- A simple implementation of a graph framework - loop logic
- A simple implementation of a graph framework - parameter passing
- A simple implementation of a graph framework - conditional judgment
- A simple implementation of a graph framework - aspect-oriented extension
- A simple implementation of a graph framework - function injection
- A simple implementation of a graph framework - message mechanism
- A simple implementation of a graph framework - event triggering
- A simple implementation of a graph framework - timeout mechanism
- A simple implementation of a graph framework - thread pool optimization (1)
- A simple implementation of a graph framework - thread pool optimization (2)
- A simple implementation of a graph framework - thread pool optimization (3)
- A simple implementation of a graph framework - thread pool optimization (4)
- A simple implementation of a graph framework - thread pool optimization (5)
- A simple implementation of a graph framework - thread pool optimization (6)
- A simple implementation of a graph framework - performance optimization (1)
- A simple implementation of a graph framework - performance optimization (2)
- A simple implementation of a graph framework - distance calculation
- CGraph theme song - Listen to the Coder
- Talking about the year I spent writing CGraph
- What is it like to lead an awesome-cpp project from scratch?
- Explosive! After CGraph performance fully surpasses taskflow, the author says he wants more...
- Optimizing graphs with graphs: ideas for calculating the maximum DAG parallelism in CGraph
- One article to understand CGraph after two and a half years of practice
- The CGraph author wants to know whether you need an eDAG scheduling framework
- Reducing edges and improving efficiency: summary of redundant edge pruning in CGraph
- Latest coding-world feel-good story: reborn as someone writing CGraph abroad (Python version)
- Building the CGraph I once did not dare to imagine
- GraphANNS : Graph-based Approximate Nearest Neighbor Search Working off CGraph
- CThreadPool : A simple, easy-to-use, powerful, high-performance, cross-platform C++ thread pool
- PyCGraph-example : A useful list of how cool to use PyCGraph
- awesome-cpp : A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.
- awesome-workflow-engines : A curated list of awesome open source workflow engines
- taskflow : A General-purpose Parallel and Heterogeneous Task Programming System
- torchpipe : Serving Inside Pytorch
- nndeploy : Easy-to-use, high-performance, multi-platform inference deployment framework
- KuiperInfer : A step-by-step guide to building a high-performance deep learning inference library, supporting inference for large models such as llama2, Unet, Yolov5, and Resnet. Implement a high-performance deep learning inference library step by step
- OGraph : A simple way to build a pipeline with Go.
- incubator-hugegraph-ai : The integration of HugeGraph with AI/LLM & GraphRAG
- pybind11 : Seamless operability between C++11 and Python
- The Python API binding feature of this project is implemented with pybind11
- Bilibili Video: pybind11 practical implementation - how PyCGraph was built | Feishu document link
Appendix 1. Version Information
[2021.05.04 - v1.0.0 - Chunel]
- Provide graph execution and support parallel computation of independent nodes
[2021.05.09 - v1.1.0 - Chunel]
- Optimize concurrency during graph execution
[2021.05.18 - v1.1.1 - Chunel]
- Add node
nameandsessioninformation
[2021.05.23 - v1.2.0 - Chunel]
- Provide single-node loop execution
[2021.05.29 - v1.3.0 - Chunel]
- Provide
clusterandregiondivision and loop execution - Provide
tutorialcontent with multiple usage examples
[2021.06.14 - v1.4.0 - Chunel]
- Provide the
parampassing mechanism - Provide the
groupfeature, with multi-node modules uniformly inheriting from thegroupmodule - Add support for Linux
[2021.06.20 - v1.4.1 - Chunel]
- Provide the
conditionfeature - Add support for Windows
[2021.06.24 - v1.5.0 - Chunel]
- Provide the
pipelinefactory creation method - Update
tutorialcontent
[2021.07.07 - v1.5.1 - Chunel]
- Optimize the thread pool and implement task stealing
[2021.07.11 - v1.5.2 - Chunel]
- Optimize the thread pool and implement automatic thread-count adjustment
[2021.07.31 - v1.5.3 - Chunel]
- Optimize the thread pool, implement batch task retrieval, and optimize task stealing
[2021.08.29 - v1.6.0 - Chunel]
- Provide multi-
pipelinesupport and optimize underlying logic - Update
tutorialcontent
[2021.09.19 - v1.6.1 - Chunel]
- Provide the
Lruoperator,Trieoperator, and template node, and optimize underlying logic - Update
tutorialcontent
[2021.09.29 - v1.7.0 - Chunel]
- Provide the
aspectfeature for horizontally extendingnodeorgroupcapabilities - Update
tutorialcontent
[2021.10.07 - v1.7.1 - Chunel]
- Optimize
aspectimplementation logic, provide aspect parameters, and support batch aspect addition - Update
tutorialcontent
[2021.11.01 - v1.8.0 - Chunel]
- Provide the
adapterfeature and thesingletonadapter feature - Optimize
pipelineexecution logic - Update
tutorialcontent
[2021.12.18 - v1.8.1 - Chunel]
- Optimize return-value
CStatusinformation
[2022.01.02 - v1.8.2 - Chunel]
- Provide automatic exit on node execution timeout and the
task groupfeature - Provide thread pool configuration parameter setters
[2022.01.23 - v1.8.3 - Chunel]
- Provide the
functionadapter to implement functional programming - Provide thread-priority scheduling and CPU-binding execution
- Update
tutorialcontent
[2022.01.31 - v1.8.4 - Chunel]
- Provide asynchronous execution for
node
[2022.02.03 - v1.8.5 - Chunel]
- Provide the
daemonfeature for periodically executing tasks outside the graph flow - Update
tutorialcontent
[2022.04.03 - v1.8.6 - Chunel]
- Provide the
DistanceCalculatoroperator for computing arbitrary data types and arbitrary distance types - Update
tutorialcontent
[2022.04.05 - v2.0.0 - Chunel]
- Provide the
domainfeature and theAnndomain abstraction model, beginning support for specific professional domains - Provide the hold execution mechanism
- Update
tutorialcontent
[2022.05.01 - v2.0.1 - Chunel]
- Optimize the
pipelineregistration mechanism and support custom sequential execution of the init method - Provide a one-click build script
[2022.05.29 - v2.1.0 - Chunel]
- Provide an
elementparameter writing method - Provide support for C++14
- Update
tutorialcontent
[2022.10.03 - v2.1.1 - Chunel]
- Provide a task-priority mechanism in the thread pool
- Optimize
groupexecution logic
[2022.11.03 - v2.2.0 - Chunel]
- Provide the
messagefeature, mainly for data transfer between differentpipelines - Update
tutorialcontent
[2022.12.24 - v2.2.1 - Chunel]
- Provide the
TemplateNodefeature to optimize parameter passing - Update
tutorialcontent
[2022.12.25 - v2.2.2 - yeshenyong]
- Optimize graph execution logic
[2022.12.30 - v2.2.3 - Chunel]
- Provide
messagepublish-subscribe support - Provide execution engine switching
[2023.01.21 - v2.3.0 - Chunel]
- Provide the
eventfeature - Provide the
CGraph Intro.xmindfile to introduce the overall CGraph logic through a mind map
[2023.01.25 - v2.3.1 - Chunel]
- Provide support for C++11. Thanks to MirrorYuChen for the related solution
[2023.02.10 - v2.3.2 - Chunel]
- Optimize the scheduling strategy and provide a scheduling parameter configuration interface
- Provide the English version of readme.md
[2023.02.12 - v2.3.3 - yeshenyong, Chunel]
- Provide graphviz visualization for graph display
- Provide parameter chain tracing
[2023.02.22 - v2.3.4 - Chunel]
- Optimize the scheduling mechanism on Windows
- Optimize the
parammechanism and theeventmechanism
[2023.03.25 - v2.4.0 - woodx, Chunel]
- Provide a runnable Docker environment and the Dockerfile for building it
- Provide the
pipelinescheduling resource control mechanism - Optimize scheduling performance
[2023.05.05 - v2.4.1 - Chunel]
- Provide thread-binding execution
- Provide a method to get the maximum parallelism of a
pipeline. Thanks to Hanano-Yuuki for the related solution - Provide asynchronous
pipelineexecution and exit during execution
[2023.06.17 - v2.4.2 - Chunel]
- Provide the
MultiConditionfeature - Provide pause and resume execution for
pipeline
[2023.07.12 - v2.4.3 - Chunel]
- Optimize
CStatusand add exception location information
[2023.09.05 - v2.5.0 - Chunel]
- Provide the perf feature for
pipelineperformance analysis - Provide the timeout mechanism for
element - Provide the
somefeature to optimize asynchronous execution ofpipeline
[2023.09.15 - v2.5.1 - Chunel]
- Provide the
fencefeature - Provide the
coordinatorfeature
[2023.11.06 - v2.5.2 - Chunel]
- Optimize the
messagefeature, allow configuring how to handle blocked writes, and reduce memory copy count - Add
examplecontent with simple implementations for different industries - Optimize scheduling performance
[2023.11.15 - v2.5.3 - Chunel]
- Provide
protodefinition files - Add the
mutablefeature and provide dependency registration syntax sugar
[2024.01.05 - v2.5.4 - Chunel]
- Provide
testcontent, including performance and functional test cases - Optimize the
eventmechanism and support asynchronous waiting
[2024.07.18 - v2.6.0 - PaPaPig-Melody, Chunel]
- Provide topological execution for
pipeline - Provide a method to determine whether dependencies exist between
elements - Provide Bazel build support
- Optimize the perf feature
[2024.09.17 - v2.6.1 - Chunel]
- Provide static execution for
pipelineand a micro-task mechanism based on static execution - Provide
pipelinepruning to remove duplicate dependencies betweenelements - Provide a method for
elementto remove dependencies - Optimize the
eventmechanism so asynchronous events can wait for completion - Release the CGraph-lite project, providing simple DAG construction and parameter passing. Its APIs are fully compatible and can be seamlessly switched to this project
[2024.11.16 - v2.6.2 - Chunel]
- Optimize parameter mutex mechanism and retrieval performance
- Fix abnormal waiting in auxiliary threads
- Update
tutorialcontent
[2025.03.16 - v3.0.0 - Chunel]
- Provide the Python version
- Provide the
stagefeature for synchronized running betweenelements - Update
tutorialcontent
[2025.05.04 - v3.1.0 - Chunel]
- Provide the full-featured Python version
- Provide Python and C++ hybrid programming
- Provide Python packaging and support installation with
pip3 install PyCGraph
[2025.06.15 - v3.1.1 - Chunel]
- Provide C# and Java versions
- Provide the
CODE_OF_CONDUCT.mddocument
[2025.09.06 - v3.1.2 - Chunel]
- Provide the Go version
- Optimize the
messagefeature - Optimize the
aspectfeature
[2025.11.08 - v3.2.2 - Chunel]
- Provide local save and load features
- Rename
PyCGraphtopycgraphand support installation withpip3 install pycgraph
[2026.03.24 - v3.2.3 - Chunel]
- Optimize the
messagefeature - Optimize stability
[2026.05.10 - v3.2.4 - Chunel]
- Optimize the
pycgraphfeature
Appendix 2. Thanks
- Thanks to the Doocs WeChat official account for publishing the related introduction document. Welcome to join the Doocs open-source community
- Thanks to the introduction and recommendation from HelloGithub magazine: HelloGithub Issue 70
- Thanks to the recommendation from awesome-cpp, we all know, it is the most authoritative recommendation list for cpp project in the world
- Thanks to the recommendation from
Taskflow Group: awesome-parallel-computing, and we always treat taskflow as a role model - Thanks to the recommendation from awesome-workflow-engines
- Thanks to all developers in CONTRIBUTORS for their contributions to the project
- Thanks to all friends who have provided suggestions and advice for the
CGraphproject. They are not listed one by one here. Everyone is always welcome to join and build together
Appendix 3. Contact
- WeChat: ChunelFeng (You are welcome to scan the QR code above and add the author as a friend. Please briefly note your personal information ^_^)
- Email: chunel@foxmail.com
- Source Code: https://github.com/ChunelFeng/CGraph
- Forum: www.chunel.cn


