Passi paralleli possono ridurre il tempo totale di esecuzione per un flusso di lavoro l'esecuzione di più chiamate di blocco contemporaneamente.
Bloccare le chiamate, ad esempio sospendere, chiamate HTTP e i callback possono richiedere del tempo, da millisecondi a giorni. I passaggi paralleli sono pensati per agevolare queste operazioni lunghe e contemporaneamente. Se un flusso di lavoro deve eseguire più chiamate di blocco sono indipendenti tra loro, l'uso di rami paralleli può ridurre il numero totale di esecuzione avviando contemporaneamente le chiamate e attendendo completarli.
Ad esempio, se il flusso di lavoro deve recuperare i dati dei clienti da diversi sistemi indipendenti prima di continuare, i rami paralleli consentono richieste API simultanee. Se sono presenti cinque sistemi e ciascuno impiega due secondi per rispondere, eseguire i passaggi in sequenza in un flusso di lavoro potrebbe richiedere almeno 10 secondi, mentre eseguirli in parallelo potrebbe richiedere solo due secondi.
Crea un passaggio parallelo
Crea un passaggio parallel
per definire una parte del flusso di lavoro in cui due o più
passaggi possono essere eseguiti contemporaneamente.
YAML
- PARALLEL_STEP_NAME: parallel: exception_policy: POLICY shared: [VARIABLE_A, VARIABLE_B, ...] concurrency_limit: CONCURRENCY_LIMIT BRANCHES_OR_FOR: ...
JSON
[ { "PARALLEL_STEP_NAME": { "parallel": { "exception_policy": "POLICY", "shared": [ "VARIABLE_A", "VARIABLE_B", ... ], "concurrency_limit": "CONCURRENCY_LIMIT", "BRANCHES_OR_FOR": ... } } } ]
Sostituisci quanto segue:
PARALLEL_STEP_NAME
: il nome del passaggio parallelo.POLICY
(facoltativo): determina l'azione che verrà intrapresa dagli altri rami in caso di eccezione non gestita. Il criterio predefinito,continueAll
, non comporta ulteriori azioni e tutti gli altri rami di eseguire un tentativo di esecuzione. Tieni presente checontinueAll
è l'unico criterio attualmente supportato.VARIABLE_A
,VARIABLE_B
e così via on: un elenco di variabili scrivibili con ambito padre che consentono le assegnazioni nel passaggio parallelo. Per ulteriori informazioni, consulta Variabili condivise.CONCURRENCY_LIMIT
(facoltativo): il numero massimo di rami e iterazioni che possono essere eseguiti contemporaneamente all'interno di un singolo flusso di lavoro prima che ulteriori rami e iterazioni vengano messi in coda in attesa. Questo si applica solo a un singolo passaggioparallel
e non è a cascata. Deve essere un numero intero positivo e può essere un valore letterale o un'espressione. Per i dettagli, vedi Limiti di contemporaneità.BRANCHES_OR_FOR
: usabranches
ofor
per indicare una delle seguenti opzioni:- Rami che possono essere eseguiti contemporaneamente.
- Un loop in cui possono essere eseguite contemporaneamente.
Tieni presente quanto segue:
- I rami e le iterazioni paralleli possono essere eseguiti in qualsiasi ordine e possono essere in un ordine diverso a ogni esecuzione.
- I passaggi paralleli possono includere altri passaggi paralleli nidificati fino al limite di profondità. Vedi Quote e limiti.
- Per maggiori dettagli, consulta la pagina di riferimento della sintassi per i passaggi paralleli.
Sostituisci la funzione sperimentale con un passaggio parallelo
Se utilizzi experimental.executions.map
per supportare il lavoro parallelo, puoi eseguire la migrazione del flusso di lavoro in modo da utilizzare i passaggi paralleli, eseguendo in parallelo i normali loop for
. Per alcuni esempi, vedi
Sostituisci la funzione sperimentale con un passaggio parallelo.
Esempi
Questi esempi mostrano la sintassi.
Eseguire operazioni in parallelo (utilizzando i rami)
Se il flusso di lavoro prevede più insiemi di passaggi diversi che possono essere eseguiti contemporaneamente, posizionarli in rami paralleli può ridurre il tempo totale necessari per completare questi passaggi.
Nell'esempio seguente, un ID utente viene passato come argomento al flusso di lavoro e i dati vengono recuperati in parallelo da due servizi diversi. Variabili condivise consentire la scrittura dei valori nei rami e leggere dopo i rami completato:
YAML
JSON
Elaborare gli elementi in parallelo (utilizzando un ciclo parallelo)
Se devi eseguire la stessa azione per ogni elemento di un elenco, puoi completare l'esecuzione più rapidamente utilizzando un ciclo parallelo. Un ciclo parallelo consente di eseguire più iterazioni del ciclo in parallelo. Tieni presente che, a differenza di i cicli for regolari, le iterazioni possono possono essere eseguite in qualsiasi ordine.
Nell'esempio seguente, un insieme di notifiche utente viene elaborato in un
ciclo for
parallelo:
YAML
JSON
Aggregare dati (utilizzando un ciclo parallelo)
Puoi elaborare un insieme di elementi mentre raccogli i dati dalle operazioni eseguita su ciascun elemento. Ad esempio, potresti voler monitorare gli ID dei articoli o gestisci un elenco di elementi con errori.
Nell'esempio seguente, 10 query separate a un set di dati pubblico di BigQuery restituisce ciascuna il numero di parole in un documento o in un insieme di documenti. R variabile condivisa permette che il conteggio delle parole si accumuli e venga letto dopo tutte le iterazioni completato. Dopo aver calcolato il numero di parole in tutti i documenti, il flusso di lavoro restituisce il totale.
YAML
JSON
Passaggi successivi
- Riferimento per la sintassi: passaggi paralleli
- Tutorial: esegui un flusso di lavoro che esegue altri flussi di lavoro in parallelo
- Tutorial: eseguire più job BigQuery in parallelo