Concurrency
Concurrency control prevents multiple workflow instances from running simultaneously. Use this feature to protect shared resources and prevent conflicts.
Fields
group (required)
Concurrency group identifier. Workflows with the same group cannot run concurrently.
Type: string (non-empty)
Supports expressions: Yes
Example:
concurrency:
group: production-deploy
With expressions:
concurrency:
group: train-${{ .inputs.model_type }}
cancel_in_progress (optional)
Controls behavior when a new workflow arrives while another is running in the same group.
Type: bool
Default: false
| Value | Behavior |
|---|---|
true | Cancel the running workflow and start the new one immediately |
false | Queue the new workflow (maximum 1 running + 1 pending; newer replaces pending) |
Example:
concurrency:
group: model-training
cancel_in_progress: true
Behavior
Queue mode (cancel_in_progress: false)
- Maximum: 1 running + 1 pending workflow
- New arrivals replace the pending workflow (keeps newest)
- When the running workflow completes, the pending one starts
Cancel mode (cancel_in_progress: true)
- New workflow cancels the running workflow
- No queue: the newest workflow always runs
Examples
Model deployment
Ensure only one model deployment runs at a time:
id: deploy-model
concurrency:
group: production-deploy
jobs:
deploy:
steps:
- run: python deploy_model.py --env production
Per-model training
Allow concurrent training of different models, but serialize same-model training:
id: train-model
inputs:
model_type:
type: string
required: true
concurrency:
group: train-${{ .inputs.model_type }}
jobs:
train:
steps:
- run: python train.py --model ${{ .inputs.model_type }}
Experiment with cancel
For experiments where only the latest hyperparameters matter:
id: hyperparameter-tuning
inputs:
experiment_id:
type: string
concurrency:
group: experiment-${{ .inputs.experiment_id }}
cancel_in_progress: true
jobs:
tune:
steps:
- run: python tune.py --experiment ${{ .inputs.experiment_id }}
Interaction with other features
cancel_on_failure
Concurrency cancellations have state cancelled (not failed), so they don't trigger cancel_on_failure in other workflows.
Expressions
Concurrency groups support the same expression contexts as other fields: .inputs, .secrets, and .env.
- Submit and view feedback for this page
- Send feedback about H2O Orchestrator | Docs to cloud-feedback@h2o.ai