GithubHelp home page GithubHelp logo

dag-executor's Introduction

dag-executor

基于多线程 DAG 任务流执行库

Example

对于如图所示的任务流:

dag

下面是一个单/多线程的 DAG 任务流执行例子:

package tk.fishfish.dagexecutor;

import com.google.common.graph.GraphBuilder;
import com.google.common.graph.MutableGraph;
import org.junit.Test;

/**
 * DAGExecutor测试
 *
 * @author 奔波儿灞
 * @since 1.0
 */
public class DagExecutorTest {

    @Test
    public void singleThread() throws InterruptedException {
        DagExecutor executor = new SingleThreadDagExecutor();
        testExecutor(executor);
    }

    @Test
    public void multiThread() throws InterruptedException {
        // 3. 创建DagExecutor
        DagExecutor executor = new MultiThreadDagExecutor(2, 5);
        testExecutor(executor);
    }


    private void testExecutor(DagExecutor executor) throws InterruptedException {
        // 1. 基于 guava api 构建任务流
        MutableGraph<Runnable> graph = GraphBuilder.directed().build();

        // 任务
        Task t0 = new Task("t0");
        Task t1 = new Task("t1");
        Task t2 = new Task("t2");
        Task t3 = new Task("t3");
        Task t4 = new Task("t4");
        Task t5 = new Task("t5");

        graph.addNode(t0);
        graph.addNode(t1);
        graph.addNode(t2);
        graph.addNode(t3);
        graph.addNode(t4);
        graph.addNode(t5);

        graph.putEdge(t0, t2);
        graph.putEdge(t1, t2);
        graph.putEdge(t2, t3);
        graph.putEdge(t3, t4);

        // 2. 图转换为DAG
        Dag dag = Dag.of(graph);

        System.out.println("hasNextTask: " + dag.hasNextTask());
        System.out.println("hasTasks: " + dag.hasTasks());
        System.out.println("numTasks: " + dag.numTasks());
        System.out.println("getErrors: " + dag.getErrors());
        System.out.println("status: " + dag.status());

        // 4. 提交
        executor.submit(dag);

        Thread.sleep(5 * 1000L);

        System.out.println("hasNextTask: " + dag.hasNextTask());
        System.out.println("hasTasks: " + dag.hasTasks());
        System.out.println("numTasks: " + dag.numTasks());
        System.out.println("getErrors: " + dag.getErrors());
        System.out.println("status: " + dag.status());
    }

}
  1. 基于 guava 的图api,构建一个 MutableGraph<Runnable> 对象
  2. 通过 Dag.of(graph) 转换成 DAG 对象,如果不是有向无环图则会抛出异常
  3. 创建 DagExecutor 实例,这里有单线程、多线程实现
  4. 提交 DAG 对象到 executor

About

平时工作做对任务流框架接触比较多,比如 azkaban、easyschedule 等。他们可以绘制任务流,完成一系列的任务。

因此,这里简单的研究下多线程的 DAG 任务流遍历,没有处理错误重试、通知等。

这里不建议基于此库去二开,毕竟已经有很多优秀的开源产品了。本项目适合学习!!!

Reference

dag-executor's People

Contributors

xuanbo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.