Workflows 實驗函式 experimental.executions.map
會為每個對應引數啟動工作流程執行作業,並等待所有執行作業完成,然後傳回清單,其中每個元素都是執行作業的結果。
如果您使用 experimental.executions.map
支援平行作業,可以改用平行步驟遷移工作流程,平行執行一般 for
迴圈。
parallel
步驟定義工作流程的一部分,其中可同時執行兩個以上的步驟。parallel
步驟會等待,直到其中定義的所有步驟都已完成,或因未處理的例外狀況而中斷,然後繼續執行。與
experimental.executions.map
類似,系統不保證執行順序。詳情請參閱平行步驟的語法參考頁面。
請注意,使用 experimental.executions.map
或 workflows.executions.run
需要額外的並行執行配額。不過,如果使用平行步驟並內嵌呼叫連接器 (請參閱翻譯連接器範例),則不需要額外執行配額。
以下範例旨在協助您以 parallel
步驟取代 experimental.executions.map
的使用方式。
翻譯工作流程
以下名為 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" } ] } ] } }, { "translate_texts": { "call": "experimental.executions.map", "args": { "workflow_id": "${workflow_id}", "arguments": "${texts_to_translate}" }, "result": "translated" } }, { "return": { "return": "${translated}" } } ] } }
輸出應會如下所示:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!" } ] } } ]
以 for:in
迴圈取代 experimental.executions.map
您可以改用平行 for:in
迴圈翻譯文字,在以下範例中,次要工作流程 translate
可直接使用,輸出內容應維持不變。您也可以選擇在平行分支中啟動其他次要工作流程執行作業。
共用變數 (translated
) 用於儲存結果,並填入空字串,以啟用靜態陣列索引。如果不需要排序,可以使用 list.concat
附加結果。平行步驟中的所有指派作業都是不可分割的。
YAML
JSON
以 for:range
迴圈取代 experimental.executions.map
您可以改用平行的 for:range
迴圈翻譯文字,使用 for:range
迴圈時,您可以指定疊代範圍的開頭和結尾。輸出結果應保持不變。
YAML
JSON
內嵌工作流程原始碼
如果次要工作流程相對簡短,建議直接納入主要工作流程,方便閱讀。舉例來說,在下列工作流程中,translate
工作流程的原始碼已內嵌。