Os fluxos de trabalho
função experimental,
experimental.executions.map
, inicia uma execução de fluxo de trabalho para cada
argumento correspondente e espera até que todas as execuções sejam concluídas, retornando
uma lista em que cada elemento é o resultado de uma execução.
Se você estiver usando experimental.executions.map
para oferecer suporte a trabalhos paralelos, poderá
migrar seu fluxo de trabalho para usar etapas paralelas, executando loops
for
comuns em paralelo.
Uma etapa parallel
define uma parte do fluxo de trabalho em que duas ou mais etapas podem
sejam executados simultaneamente. Uma etapa parallel
espera até que todas as etapas definidas em
ele for concluído ou for interrompido por uma exceção não processada; a execução,
continua. Assim como
experimental.executions.map
, a ordem de execução não é garantida. Para
detalhes, consulte a página de referência de sintaxe para
etapas paralelas.
O uso de experimental.executions.map
ou workflows.executions.run
requer cota de execuções simultâneas extra.
No entanto, ao usar etapas paralelas com chamadas para conectores
inline (consulte o exemplo de conector de tradução), nenhuma
cota de execução adicional é necessária.
Os exemplos a seguir têm como objetivo ajudar você a substituir o uso de
experimental.executions.map
com um passo de parallel
.
Fluxo de trabalho de tradução
Com um idioma de origem e de destino, o fluxo de trabalho a seguir, chamado translate
,
usa o
Conector do Cloud Translation
para traduzir um texto de entrada e retornar o resultado. A API Cloud Translation
precisa ser ativada.
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}" } } ] } }
Entrada para o exemplo anterior:
{ "text": "Bonjour", "target": "en", "source": "fr" }
A saída será semelhante a esta:
{ "data": { "translations": [ { "translatedText": "Hello" } ] } }
Fluxo de trabalho de tradução em lote usando experimental.executions.map
O fluxo de trabalho a seguir traduz um lote de textos. Para cada entrada,
experimental.executions.map
executa o fluxo de trabalho translate
criado
antes.
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}" } } ] } }
A saída será semelhante a esta:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!" } ] } } ]
Substituir experimental.executions.map
por uma repetição for:in
Em vez de usar a função experimental, é possível usar uma repetição for:in
paralela
para traduzir o texto. No exemplo a seguir, o fluxo de trabalho secundário,
translate
pode ser usado no estado em que se encontra e a saída deve permanecer inalterada. Você também
tem a opção de iniciar outras execuções de fluxo de trabalho secundárias em
filiais paralelas.
Uma variável compartilhada,
translated
, é usada para armazenar os resultados e é preenchida com strings vazias
para ativar a indexação estática de matrizes. Se a ordenação não for necessária, use
list.concat
para anexar o
resultados. Todas as atribuições em etapas paralelas são atômicas.
YAML
JSON
Substituir experimental.executions.map
por uma repetição for:range
Em vez de usar a função experimental, use um loop for:range
paralelo
para traduzir o texto. Ao usar um loop for:range
, você pode especificar
o início e o fim de um intervalo de iteração. A saída não será modificada.
YAML
JSON
Inserir o código-fonte do fluxo de trabalho
Se o fluxo secundário for relativamente breve, inclua-o
diretamente no fluxo principal para facilitar a leitura. Por exemplo, no
fluxo de trabalho a seguir, o código-fonte do fluxo de trabalho translate
foi
inlinizado.