工作流程
实验函数,
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
可按原样使用,并且输出应保持不变。您
可以选择在 Pod 内启动其他辅助工作流执行作业
并行分支。
共享变量
translated
,用于存储结果,并填充空字符串
以启用静态数组索引。如果不需要排序,您可以使用
list.concat
,用于将
结果。并行步骤中的所有赋值都是原子性的。
YAML
JSON
将 experimental.executions.map
替换为 for:range
循环
您可以不使用实验性函数,而使用并行 for:range
来翻译文字。通过使用 for:range
循环,您可以指定
迭代范围的开始和结束。输出内容应保持不变。
YAML
JSON
内嵌工作流源代码
如果次要工作流相对较短,您不妨添加它
可直接在主工作流中使用,以便于阅读。例如,在
以下工作流的源代码,translate
工作流的源代码已
内联。