La funzione sperimentale dei workflow
,
experimental.executions.map, avvia l'esecuzione di un workflow per ogni
argomento corrispondente e attende il completamento di tutte le esecuzioni, restituendo
un elenco in cui ogni elemento è il risultato di un'esecuzione.
Se utilizzi experimental.executions.map per supportare il lavoro parallelo, puoi
eseguire la migrazione del workflow per utilizzare invece i passaggi paralleli, eseguendo i normali
for loop in parallelo.
Un passaggio parallel definisce una parte del workflow in cui due o più passaggi possono essere eseguiti contemporaneamente. Un passaggio parallel attende il completamento o l'interruzione di tutti i passaggi definiti al suo interno a causa di un'eccezione non gestita; l'esecuzione continua. Come experimental.executions.map, l'ordine di esecuzione non è garantito. Per
maggiori dettagli, consulta la pagina di riferimento per la sintassi dei
passaggi paralleli.
Tieni presente che l'utilizzo di experimental.executions.map o workflows.executions.run
richiede una quota di esecuzioni simultanee aggiuntiva.
Tuttavia, quando utilizzi passaggi paralleli con chiamate ai connettori
in linea (vedi l'esempio del connettore di traduzione), non è richiesta alcuna quota di esecuzione aggiuntiva.
Gli esempi seguenti hanno lo scopo di aiutarti a sostituire l'utilizzo di experimental.executions.map con un passaggio parallel.
Workflow di traduzione
Dati una lingua di origine e una di destinazione, il seguente workflow, denominato translate,
utilizza il
connettore Cloud Translation
per tradurre un testo di input e restituire il risultato. Tieni presente che l'API Cloud Translation deve essere abilitata.
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}" } } ] } }
Input per l'esempio precedente:
{ "text": "Bonjour", "target": "en", "source": "fr" }
L'output dovrebbe essere simile al seguente:
{ "data": { "translations": [ { "translatedText": "Hello" } ] } }
Workflow di traduzione batch che utilizza experimental.executions.map
Il seguente workflow traduce un batch di testi. Per ogni input,
experimental.executions.map esegue il translate workflow creato
in precedenza.
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}" } } ] } }
L'output dovrebbe essere simile al seguente:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!"