V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
owenliang
V2EX  ›  C

一个小玩具--基于 DAG 图的任务依赖调度

  •  
  •   owenliang · 2018-02-23 11:59:09 +08:00 · 2758 次点击
    这是一个创建于 2456 天前的主题,其中的信息可能已经有所发展或是发生改变。

    task_schedule

    项目地址

    点我

    项目介绍

    基于 DAG 图的调度 DEMO,基于图数据结构与拓扑序列理论,实现一个任务调度类。

    输入

        /*
         *
         *             J O B 1
         *          /    \       \
         *        V      V      V
         *     JOB2  JOB3  JOB5
         *         \     /
         *         V   V
         *         JOB4
         */
    

    输出

    ---------------
    任务名:job1
    是否完成:NO
    (当前)依赖这些任务: job2  job3  job5 
    (当前)被这些任务依赖:
    任务名:job2
    是否完成:NO
    (当前)依赖这些任务: job4 
    (当前)被这些任务依赖: job1 
    任务名:job3
    是否完成:NO
    (当前)依赖这些任务: job4 
    (当前)被这些任务依赖: job1 
    任务名:job4
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job2  job3 
    任务名:job5
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    ---------------
    <<<<<<<<< 可执行待办任务列表:  job4  job5 
    >>>>>>>>>job4 被执行
    ---------------
    任务名:job1
    是否完成:NO
    (当前)依赖这些任务: job2  job3  job5 
    (当前)被这些任务依赖:
    任务名:job2
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job3
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job4
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job2  job3 
    任务名:job5
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    ---------------
    >>>>>>>>>job5 被执行
    ---------------
    任务名:job1
    是否完成:NO
    (当前)依赖这些任务: job2  job3 
    (当前)被这些任务依赖:
    任务名:job2
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job3
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job4
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job2  job3 
    任务名:job5
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    ---------------
    <<<<<<<<< 可执行待办任务列表:  job2  job3 
    >>>>>>>>>job2 被执行
    ---------------
    任务名:job1
    是否完成:NO
    (当前)依赖这些任务: job3 
    (当前)被这些任务依赖:
    任务名:job2
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job3
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job4
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job3 
    任务名:job5
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    ---------------
    >>>>>>>>>job3 被执行
    ---------------
    任务名:job1
    是否完成:NO
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    任务名:job2
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job3
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    任务名:job4
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    任务名:job5
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖: job1 
    ---------------
    <<<<<<<<< 可执行待办任务列表:  job1 
    >>>>>>>>>job1 被执行
    ---------------
    任务名:job1
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    任务名:job2
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    任务名:job3
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    任务名:job4
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    任务名:job5
    是否完成:YES
    (当前)依赖这些任务:
    (当前)被这些任务依赖:
    ---------------
    
    第 1 条附言  ·  2018-02-23 13:13:26 +08:00
    5 条回复    2018-03-01 15:54:31 +08:00
    dakb
        1
    dakb  
       2018-02-23 16:11:33 +08:00
    消灭 0 回复惨案吧。。
    owenliang
        2
    owenliang  
    OP
       2018-02-23 16:18:49 +08:00
    @dakb 666
    lovejoy
        3
    lovejoy  
       2018-02-23 17:44:38 +08:00
    @owenliang 你们的用途是?
    owenliang
        4
    owenliang  
    OP
       2018-02-23 18:20:00 +08:00
    @lovejoy 比如 hadoop 多轮计算。
    owenliang
        5
    owenliang  
    OP
       2018-03-01 15:54:31 +08:00
    继续完善了一轮,增加了多进程调度: https://github.com/owenliang/task_schedule

    后续会支持 YAML 配置拓扑,提供一个命令行工具供使用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5373 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:21 · PVG 09:21 · LAX 17:21 · JFK 20:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.