工作流程
实验函数,
experimental.executions.map
为每个项目启动工作流执行作业,
并等待所有执行完成,返回
一个列表,其中每个元素都是执行结果。
如果您使用 experimental.executions.map
来支持并行工作,则可以改为迁移工作流以使用并行步骤,并行执行普通的 for
循环。
parallel
步骤定义工作流程中可以执行两个或更多步骤的部分
同时执行parallel
步骤会等待其内定义的所有步骤完成或被未处理的异常中断;然后,执行会继续。点赞
experimental.executions.map
,则不保证执行顺序。对于
请参阅 API 的语法参考页面
并行步骤。
请注意,使用 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
可按原样使用,并且输出应保持不变。您
可以选择在 Cloud Shell 中
并行分支。
共享变量 translated
用于存储结果,并填充空字符串以启用静态数组编制索引。如果不需要排序,您可以使用
list.concat
,用于将
结果。并行步骤中的所有赋值都是原子性的。
YAML
JSON
将 experimental.executions.map
替换为 for:range
循环
您可以使用并行 for:range
循环来翻译文本,而无需使用实验性函数。通过使用 for:range
循环,您可以指定
迭代范围的开始和结束。输出内容应保持不变。
YAML
JSON
内嵌工作流源代码
如果辅助工作流相对较短,您可能需要直接将其包含在主工作流中,以便于阅读。例如,在以下工作流中,translate
工作流的源代码已内嵌。