Flujos de trabajo
función experimental,
experimental.executions.map
, inicia una ejecución de flujo de trabajo para cada
argumento correspondiente y espera a que finalicen todas las ejecuciones para mostrar
una lista en la que cada elemento es el resultado de una ejecución.
Si usas experimental.executions.map
para admitir el trabajo paralelo, puedes
migrar tu flujo de trabajo para usar pasos paralelos, ejecutando tareas de
for
se repiten en paralelo.
Un paso parallel
define una parte de tu flujo de trabajo en la que dos o más pasos pueden ejecutarse de forma simultánea. Un paso parallel
espera hasta que se completen todos los pasos definidos en él o se interrumpan por una excepción no controlada. Luego, continúa la ejecución. Me gusta
experimental.executions.map
, el orden de ejecución no está garantizado. Para
consulta la página de referencia de sintaxis para obtener
pasos paralelos.
Ten en cuenta que el uso de experimental.executions.map
o workflows.executions.run
requiere una cuota de ejecuciones simultáneas adicional
Sin embargo, cuando se usan pasos paralelos con llamadas a los conectores
intercalado (consulta el ejemplo de conector de traducción), no
se requiere una cuota de ejecución adicional.
Los siguientes ejemplos tienen como objetivo ayudarte a reemplazar el uso de experimental.executions.map
por un paso parallel
.
Flujo de trabajo de traducción
Dado un idioma de origen y uno de destino, el siguiente flujo de trabajo, llamado translate
, usa el conector de Cloud Translation para traducir un texto de entrada y mostrar el resultado. Ten en cuenta que la API de Cloud Translation
debe habilitarse.
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 el ejemplo anterior:
{ "text": "Bonjour", "target": "en", "source": "fr" }
El resultado debe parecerse al siguiente:
{ "data": { "translations": [ { "translatedText": "Hello" } ] } }
Flujo de trabajo de traducción por lotes con experimental.executions.map
El siguiente flujo de trabajo traduce un lote de textos. Para cada entrada,
experimental.executions.map
ejecuta el flujo de trabajo de translate
que se creó
anteriormente.
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}" } } ] } }
El resultado debe parecerse al siguiente:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!" } ] } } ]
Reemplaza experimental.executions.map
por un bucle for:in
En lugar de usar la función experimental, puedes usar un bucle for:in
paralelo para traducir el texto. En el siguiente ejemplo, el flujo de trabajo secundario, translate
, se puede usar tal como está, y el resultado no debería cambiar. También
tienes la opción de iniciar otras ejecuciones de flujos de trabajo secundarios en
ramas paralelas.
Se usa una variable compartida, translated
, para almacenar los resultados y se propaga con cadenas vacías para habilitar el indexado de arrays estáticos. Si no se requiere ordenar, puedes usar
list.concat
para adjuntar el
resultados. Todas las asignaciones en pasos paralelos son atómicas.
YAML
JSON
Reemplaza experimental.executions.map
por un bucle for:range
En lugar de usar la función experimental, puedes usar un objeto for:range
paralelo
bucle para traducir el texto. Con un bucle for:range
, puedes especificar
el principio y el final de un rango de iteraciones. El resultado no debería cambiar.
YAML
JSON
Intercala el código fuente del flujo de trabajo
Si el flujo de trabajo secundario es relativamente breve, te recomendamos que lo incluyas directamente en el flujo de trabajo principal para facilitar la lectura. Por ejemplo, en la
siguiente flujo de trabajo, el código fuente para el flujo de trabajo de translate
se ha
intercalado.