Les étapes parallèles peuvent réduire le temps total d'exécution d'un workflow en effectuant plusieurs appels bloquants en même temps.
Le blocage des appels tels que les veille, les appels HTTP et les callbacks peut prendre du temps, de quelques millisecondes à plusieurs jours. Les étapes parallèles sont destinées à faciliter ce type d'opérations de longue durée simultanées. Si un workflow doit effectuer plusieurs appels bloquants indépendants les uns des autres, l'utilisation de branches parallèles peut réduire le temps d'exécution total en démarrant les appels en même temps et en attendant qu'ils soient tous terminés.
Par exemple, si votre workflow doit récupérer des données client de plusieurs systèmes indépendants avant de continuer, les branches parallèles autorisent les requêtes API simultanées. S'il existe cinq systèmes et que chacun met deux secondes à répondre, l'exécution séquentielle des étapes dans un workflow peut prendre au moins 10 secondes. Leur exécution en parallèle peut ne prendre que deux secondes.
Créer une étape parallèle
Créez une étape parallel
pour définir une partie de votre workflow dans laquelle deux étapes ou plus peuvent s'exécuter simultanément.
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": ... } } } ]
Remplacez les éléments suivants :
PARALLEL_STEP_NAME
: nom de l'étape parallèle.POLICY
(facultatif): détermine l'action que les autres branches effectuent lorsqu'une exception non gérée se produit. La stratégie par défaut,continueAll
, n'entraîne aucune autre action, et toutes les autres branches tenteront de s'exécuter. Notez quecontinueAll
est la seule règle actuellement acceptée.VARIABLE_A
,VARIABLE_B
, etc. : liste de variables accessibles en écriture avec un champ d'application parent qui autorisent les attributions au cours de l'étape parallèle. Pour en savoir plus, consultez la section Variables partagées.CONCURRENCY_LIMIT
(facultatif): nombre maximal de branches et d'itérations pouvant s'exécuter simultanément dans une même exécution de workflow avant que les nouvelles branches et itérations soient mises en file d'attente. Cela ne s'applique qu'à une seule étapeparallel
et n'est pas en cascade. Doit être un entier positif et peut être une valeur littérale ou une expression. Pour en savoir plus, consultez la section Limites de simultanéité.BRANCHES_OR_FOR
: utilisezbranches
oufor
pour indiquer l'un des éléments suivants :- Branches pouvant s'exécuter simultanément
- Boucle dans laquelle des itérations peuvent s'exécuter simultanément.
Veuillez noter les points suivants :
- Les branches et itérations parallèles peuvent s'exécuter dans n'importe quel ordre, voire dans un ordre différent à chaque exécution.
- Les étapes parallèles peuvent inclure d'autres étapes parallèles imbriquées jusqu'à la limite de profondeur. Consultez la page Quotas et limites pour en savoir plus.
- Pour en savoir plus, consultez la page de référence sur la syntaxe des étapes en parallèle.
Remplacer la fonction expérimentale par une étape parallèle
Si vous utilisez experimental.executions.map
pour gérer le travail parallèle, vous pouvez migrer votre workflow afin d'utiliser des étapes parallèles à la place, en exécutant des boucles for
ordinaires en parallèle. Pour obtenir des exemples, consultez la section Remplacer la fonction expérimentale par l'étape parallèle.
Exemples
Ces exemples illustrent la syntaxe.
Effectuer des opérations en parallèle (à l'aide de branches)
Si votre workflow comporte plusieurs ensembles d'étapes pouvant être exécutés en même temps, les placer dans des branches parallèles peut réduire le temps total nécessaire pour effectuer ces étapes.
Dans l'exemple suivant, un ID utilisateur est transmis en tant qu'argument au workflow, et les données sont récupérées en parallèle à partir de deux services différents. Les variables partagées permettent d'écrire des valeurs dans les branches et de les lire une fois les branches terminées:
YAML
JSON
Traiter les éléments en parallèle (à l'aide d'une boucle parallèle)
Si vous devez effectuer la même action pour chaque élément d'une liste, vous pouvez terminer l'exécution plus rapidement à l'aide d'une boucle parallèle. Une boucle parallèle permet d'effectuer plusieurs itérations de boucle en parallèle. Notez que, contrairement aux boucles for classiques, les itérations peuvent être effectuées dans n'importe quel ordre.
Dans l'exemple suivant, un ensemble de notifications utilisateur est traité dans une boucle for
parallèle:
YAML
JSON
Agréger des données (à l'aide d'une boucle parallèle)
Vous pouvez traiter un ensemble d'éléments tout en collectant les données des opérations effectuées sur chaque élément. Par exemple, vous pouvez suivre les ID des éléments créés ou gérer une liste d'éléments comportant des erreurs.
Dans l'exemple suivant, 10 requêtes distinctes adressées à un ensemble de données BigQuery public renvoient chacune le nombre de mots d'un document ou d'un ensemble de documents. Une variable partagée permet d'accumuler et de lire le nombre de mots une fois toutes les itérations terminées. Après avoir calculé le nombre de mots dans tous les documents, le workflow renvoie le nombre total de mots.
YAML
JSON
Étapes suivantes
- Documentation de référence sur la syntaxe: étapes parallèles
- Tutoriel: Exécuter un workflow qui exécute d'autres workflows en parallèle
- Tutoriel: Exécuter plusieurs jobs BigQuery en parallèle