Passi paralleli possono ridurre il tempo totale di esecuzione di un flusso di lavoro eseguendo più chiamate di blocco contemporaneamente.
Bloccare le chiamate, come quelle relative alla sospensione, alle chiamate HTTP e ai callbacks, può richiedere tempo, da millisecondi a giorni. I passaggi paralleli hanno lo scopo di assistere in queste operazioni concomitanti a lunga esecuzione. Se un flusso di lavoro deve eseguire più chiamate di blocco indipendenti l'una dall'altra, l'utilizzo di rami paralleli può ridurre il tempo di esecuzione totale avviando le chiamate contemporaneamente e attendendo il loro completamento.
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 esistono cinque sistemi e ognuno impiega due secondi per rispondere, l'esecuzione dei passaggi in sequenza in un flusso di lavoro potrebbe richiedere almeno 10 secondi, l'esecuzione in parallelo potrebbe richiedere solo due.
Crea un passaggio parallelo
Crea un passaggio parallel
per definire una parte del flusso di lavoro in cui possono essere eseguiti contemporaneamente due o più passaggi.
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.- (Facoltativo)
POLICY
: determina l'azione eseguita da altri rami quando si verifica un'eccezione non gestita. Il criterio predefinito,continueAll
, non comporta ulteriori azioni e tutti gli altri rami tenteranno di eseguire. Tieni presente checontinueAll
è l'unico criterio attualmente supportato. VARIABLE_A
,VARIABLE_B
e così via: un elenco di variabili scrivibili con ambito padre che consentono le assegnazioni nel passaggio parallelo. Per maggiori 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. Si applica solo a un singolo passaggioparallel
e non viene applicata a cascata. Deve essere un numero intero positivo e può essere un valore letterale o un'espressione. Per maggiori dettagli, vedi Limiti di contemporaneità.BRANCHES_OR_FOR
: utilizzabranches
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:
- Rami e iterazioni paralleli possono essere eseguiti in qualsiasi ordine e 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 ulteriori dettagli, consulta la pagina di riferimento alla 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 per utilizzare passaggi paralleli, eseguendo i normali
cicli for
in parallelo. Ad esempio, consulta Sostituire la funzione sperimentale con un passaggio parallelo.
Esempi
Questi esempi dimostrano la sintassi.
Eseguire operazioni in parallelo (utilizzando i rami)
Se il flusso di lavoro ha più insiemi di passaggi diversi che possono essere eseguiti contemporaneamente, posizionarli in rami paralleli può ridurre il tempo totale necessario per completare questi passaggi.
Nell'esempio seguente, uno User-ID viene passato come argomento al flusso di lavoro e i dati vengono recuperati in parallelo da due servizi diversi. Le variabili condivise consentono di scrivere i valori nei rami e di leggerli dopo il completamento dei rami:
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 loop parallelo. Un loop parallelo consente di eseguire più iterazioni di loop in parallelo. Tieni presente che, a differenza dei normali cicli for, le iterazioni possono essere eseguite in qualsiasi ordine.
Nell'esempio seguente, un insieme di notifiche utente viene elaborato in un loop for
parallelo:
YAML
JSON
Aggregare dati (utilizzando un ciclo parallelo)
Puoi elaborare un insieme di elementi mentre raccogli i dati dalle operazioni eseguite su ciascun elemento. Ad esempio, potresti voler monitorare gli ID degli elementi creati o gestire un elenco di elementi con errori.
Nell'esempio seguente, 10 query separate in un set di dati BigQuery pubblico restituiscono ciascuna il numero di parole in un documento o insieme di documenti. Una variabile condivisa consente al conteggio delle parole di accumularsi e di essere lette al termine di tutte le iterazioni. 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 esegua altri flussi di lavoro in parallelo
- Tutorial: eseguire più job BigQuery in parallelo