---
title: "dag"
date: 0001-01-01
summary: "dag #  描述 #  dag 处理器用来管理任务的并行调度。
配置示例 #  下面的这个例子，定义了一个名为 racing_example 的服务，auto_start 设置为自动启动，processor 设置依次执行的每个处理单元，其中 dag 处理器支持多个任务并行执行，支持 wait_all 和 first_win 两种聚合模式，如下：
pipeline: - name: racing_example auto_start: true processor: - echo: #ready, set, go message: read,set,go - dag: mode: wait_all #first_win, wait_all parallel: - echo: #player1 message: player1 - echo: #player2 message: player2 - echo: #player3 message: player3 end: - echo: #checking score message: checking score - echo: #announce champion message: 'announce champion' - echo: #done message: racing finished 上面的 echo 处理器非常简单，用来输出一个指定的消息，这个管道模拟的是一个赛跑的场景，palyer1、2、3 并行赛跑，全部跑完之后再进行算分和宣布比赛冠军，最后输出结束信息，程序运行输出如下："
---


# dag

## 描述

dag 处理器用来管理任务的并行调度。

## 配置示例

下面的这个例子，定义了一个名为 `racing_example` 的服务，`auto_start` 设置为自动启动，`processor` 设置依次执行的每个处理单元，其中 `dag` 处理器支持多个任务并行执行，支持 `wait_all` 和 `first_win` 两种聚合模式，如下：

```
pipeline:
  - name: racing_example
    auto_start: true
    processor:
    - echo: #ready, set, go
        message: read,set,go
    - dag:
        mode: wait_all #first_win, wait_all
        parallel:
          - echo: #player1
              message: player1
          - echo: #player2
              message: player2
          - echo: #player3
              message: player3
        end:
          - echo: #checking score
              message: checking score
          - echo: #announce champion
              message: 'announce champion'
    - echo: #done
        message: racing finished
```

上面的 `echo` 处理器非常简单，用来输出一个指定的消息，这个管道模拟的是一个赛跑的场景，palyer1、2、3 并行赛跑，全部跑完之后再进行算分和宣布比赛冠军，最后输出结束信息，程序运行输出如下：

```
[10-12 14:59:22] [INF] [echo.go:36] message:read,set,go
[10-12 14:59:22] [INF] [echo.go:36] message:player1
[10-12 14:59:22] [INF] [echo.go:36] message:player2
[10-12 14:59:22] [INF] [echo.go:36] message:player3
[10-12 14:59:22] [INF] [echo.go:36] message:checking score
[10-12 14:59:22] [INF] [echo.go:36] message:announce champion
[10-12 14:59:22] [INF] [echo.go:36] message:racing finished
```

## 参数说明

| 名称     | 类型   | 说明                                                                                                                                            |
| -------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| mode     | string | 任务结果的聚合模式，设置 `first_win` 表示并行里面的任意任务执行完就继续往下执行，而设置 `wait_all` 表示需要等待所有任务执行完毕才继续往后执行。 |
| parallel | array  | 任务数组列表，依次定义多个子任务                                                                                                                |
| end      | array  | 任务数组列表，并行任务之后再执行的任务                                                                                                          |

