利用有向无环图DAG实现简单的任务依赖调度

本文介绍了作者在学习Airflow后,尝试用有向无环图(DAG)自行实现简单任务调度的过程。文章提到,为提高效率,作者采用了py-dag库来辅助实现。
摘要由CSDN通过智能技术生成
from concurrent.futures import ThreadPoolExecutor
from dag import DAG
import time


class Scheduler:
    def __init__(self, dag):
        self.dag = dag
    def run_dag(self):
        while not self.done():
            runs = self.should_run()
            for run in runs:
                get_run(run)()
            time.sleep(1)
    def done(self, runs=None):
        if not runs:
            runs = self.dag.topological_sort()
        return all(get_run(run).done()=='done' for run in runs)
    def should_run(self):
        ret = []
        all_nodes = self.dag.topological_sort()
        for node in all_nodes:
            if get_run(node).done() == "pending" and (not self.dag.predecessors(node) or self.done(self.dag.predecessors(node))):
                ret.append(node)
        return ret

class MyDAG(DAG):
    def __init__(self, executor):
        super().__init__()
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值