將實驗功能替換為平行步驟

Workflows 實驗函式 experimental.executions.map 會為每個對應引數啟動工作流程執行作業,並等待所有執行作業完成,然後傳回清單,其中每個元素都是執行作業的結果。

如果您使用 experimental.executions.map 支援平行工作,可以改用平行步驟遷移工作流程,平行執行一般 for 迴圈

parallel 步驟定義工作流程的一部分,其中可同時執行兩個以上的步驟。parallel 步驟會等待,直到其中定義的所有步驟都已完成,或因未處理的例外狀況而中斷;然後繼續執行。與 experimental.executions.map 類似,執行順序不保證。詳情請參閱平行步驟的語法參考頁面。

請注意,使用 experimental.executions.mapworkflows.executions.run 需要額外的並行執行配額。不過,如果使用並行步驟,並內嵌呼叫連接器 (請參閱翻譯連接器範例),則不需要額外執行配額。

以下範例旨在協助您將 experimental.executions.map 替換為 parallel 步驟。

翻譯工作流程

以下名為 translate 的工作流程會使用 Cloud Translation 連接器,根據來源和目標語言翻譯輸入文字,並傳回結果。請注意,您必須啟用 Cloud Translation API。

YAML

  main:
    params: [args]
    steps:
    - basic_translate:
        call: googleapis.translate.v2.translations.translate
        args:
          body:
            q: ${args.text}
            target: ${args.target}
            format: "text"
            source: ${args.source}
        result: r
    - return_step:
        return: ${r}

JSON

  {
    "main": {
      "params": [
        "args"
      ],
      "steps": [
        {
          "basic_translate": {
            "call": "googleapis.translate.v2.translations.translate",
            "args": {
              "body": {
                "q": "${args.text}",
                "target": "${args.target}",
                "format": "text",
                "source": "${args.source}"
              }
            },
            "result": "r"
          }
        },
        {
          "return_step": {
            "return": "${r}"
          }
        }
      ]
    }
  }

上述範例的輸入內容:

{
  "text": "Bonjour",
  "target": "en",
  "source": "fr"
}

輸出應會如下所示:

{
 "data": {
   "translations": [
     {
       "translatedText": "Hello"
     }
   ]
 }
}

使用 experimental.executions.map 的批次翻譯工作流程

以下工作流程會翻譯一批文字。針對每個輸入,experimental.executions.map 會執行先前建立的 translate 工作流程。

YAML

  main:
     steps:
     - init:
         assign:
         - workflow_id: "translate"
         - texts_to_translate:
             - text: "hello world!"
               source: "en"
               target: "fr"
             - text: "你好 世界!"
               source: "zh-CN"
               target: "en"
             - text: "No hablo español!"
               source: "es"
               target: "en"
     - translate_texts:
         call: experimental.executions.map
         args:
             workflow_id: ${workflow_id}
             arguments: ${texts_to_translate}
         result: translated
     - return:
             return: ${translated}

JSON

  {
    "main": {
      "steps": [
        {
          "init": {
            "assign": [
              {
                "workflow_id": "translate"
              },
              {
                "texts_to_translate": [
                  {
                    "text": "hello world!",
                    "source": "en",
                    "target": "fr"
                  },
                  {
                    "text": "你好 世界!",
                    "source": "zh-CN",
                    "target": "en"
                  },
                  {
                    "text": "No hablo español!",
                    "source": "es",
                    "target": "en"
                  }
                ]
              }
            ]
          }
        },
        {