工作流程實驗函式 experimental.executions.map
會為每個對應的引數啟動工作流程執行作業,並等待所有執行作業完成,然後傳回清單,其中每個元素都是執行作業的結果。
如果您使用 experimental.executions.map
來支援平行工作,可以改為使用平行步驟遷移工作流程,並同時執行一般 for
迴圈。
parallel
步驟可定義工作流程的一部分,其中可同時執行兩個以上的步驟。parallel
步驟會等到其中定義的所有步驟完成,或遭到未處理的例外狀況中斷為止;接著繼續執行。就像 experimental.executions.map
一樣,我們無法保證執行順序。詳情請參閱平行步驟的語法參考資料頁面。
請注意,使用 experimental.executions.map
或 workflows.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" } ] } ] } }, { "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!" } ] } } ]
將 experimental.executions.map
替換為 for:in
迴圈
您可以改用平行 for:in
迴圈來翻譯文字,而非使用實驗功能。在以下範例中,可以直接使用輔助工作流程 translate
,且輸出內容應保持不變。您也可以選擇在平行分支中啟動其他次要工作流程執行作業。
共用變數 translated
用於儲存結果,並填入空字串,以便啟用靜態陣列索引。如果不需要排序,您可以使用 list.concat
附加結果。並行步驟中的所有指派都是不可分割的。
YAML
JSON
將 experimental.executions.map
替換為 for:range
迴圈
您可以改用並行 for:range
迴圈來翻譯文字,而非使用實驗功能。您可以使用 for:range
迴圈,指定疊代範圍的起點和終點。輸出結果應保持不變。
YAML
JSON
內嵌工作流程原始碼
如果次要工作流程相對簡短,建議您直接將其納入主要工作流程,方便閱讀。舉例來說,在下列工作流程中,translate
工作流程的原始碼已內嵌。