python任务编排_基于DAG实现的任务编排框架&平台

最近在做的工作比较需要一个支持任务编排工作流的框架或者平台,这里记录下实现上的一些思路。

任务编排工作流

任务编排是什么意思呢,顾名思义就是可以把"任务"这个原子单位按照自己的方式进行编排,任务之间可能互相依赖。复杂一点的编排之后就能形成一个 workflow 工作流了。我们希望这个工作流按照我们编排的方式去执行每个原子 task 任务。如下图所示,我们希望先并发运行 Task A 和 Task C,Task A 执行完后串行运行 Task B,在并发等待 Task B 和 C 都结束后运行 Task D,这样就完成了一个典型的任务编排工作流。

431fb6f423281b009d732f5dafb7634a.png

DAG 有向无环图

首先我们了解图这个数据结构,每个元素称为顶点 vertex,顶点之间的连线称为边 edge。像我们画的这种带箭头关系的称为有向图,箭头关系之间能形成一个环的成为有环图,反之称为无环图。显然运用在我们任务编排工作流上,最合适的是 DAG 有向无环图。

我们在代码里怎么存储图呢,有两种数据结构:邻接矩阵和邻接表。

下图表示一个有向图的邻接矩阵,例如 x->y 的边,只需将 Array[x][y]标识为 1 即可。

83e60a395f7cdcecf3d4e421c9a61089.png

此外我们也可以使用邻接表来存储,这种存储方式较好地弥补了邻接矩阵浪费空间的缺点,但相对来说邻接矩阵能更快地判断连通性。

17ddb7d9d413fe86fa0728046a6aecdd.png

一般在代码实现上,我们会选择邻接矩阵,这样我们在判断两点之间是否有边更方便点。

一个任务编排框架

了解了 DAG 的基本知识后我们可以来简单实现一

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Airflow是一个基于Python的开源工作流调度和任务编排平台,它使用DAG(有向无环图)来定义任务之间的依赖关系。通过Airflow,您可以轻松地创建、调度和监控复杂的工作流。 以下是使用Airflow创建和调度DAG图的示例代码: 1. 安装Airflow: ```shell pip install apache-airflow ``` 2. 创建DAG图文件(例如,my_dag.py): ```python from datetime import datetime from airflow import DAG from airflow.operators.python_operator import PythonOperator def task1(): # 任务1的代码 def task2(): # 任务2的代码 # 创建DAGdag = DAG('my_dag', description='DAG图调度示例', schedule_interval='0 0 * * *', start_date=datetime(2022, 1, 1)) # 定义任务1和任务2 task_1 = PythonOperator(task_id='task_1', python_callable=task1, dag=dag) task_2 = PythonOperator(task_id='task_2', python_callable=task2, dag=dag) # 定义任务之间的依赖关系 task_1 >> task_2 ``` 3. 启动Airflow调度程序: ```shell airflow scheduler ``` 4. 启动Airflow Web服务器: ```shell airflow webserver -p 8080 ``` 5. 在浏览器中访问`http://localhost:8080`,您将看到Airflow的Web界面。 在Web界面中,您可以查看已定义的DAG图、运行任务、监控任务状态等。Airflow提供了丰富的功能,如任务调度、任务重试、任务监控、动态调整工作流等。 这只是一个简单的示例,您可以根据自己的需求和任务定义更复杂的DAG图。Airflow提供了更多的操作符和功能,如BashOperator、PythonOperator、BranchPythonOperator等,以及丰富的插件生态系统。 希望这些信息能帮助您开始使用Airflow进行DAG图调度!如有任何进一步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值