# Triggers
Triggers are functions that determine if a task should run based on the state of upstream tasks.
For example, suppose we want to construct a flow with one root task; if this task succeeds, we want to run task B. If instead it fails, we want to run task C. We can accomplish this pattern through the use of triggers:
import random
from prefect.triggers import all_successful, all_failed
from prefect import task, Flow
@task(name="Task A")
def task_a():
if random.random() > 0.5:
raise ValueError("Non-deterministic error has occured.")
@task(name="Task B", trigger=all_successful)
def task_b():
# do something interesting
pass
@task(name="Task C", trigger=all_failed)
def task_c():
# do something interesting
pass
with Flow("Trigger example") as flow:
success = task_b(upstream_tasks=[task_a])
fail = task_c(upstream_tasks=[task_a])
## note that as written, this flow will fail regardless of the path taken
## because *at least one* terminal task will fail;
## to fix this, we want to set Task B as the "reference task" for the Flow
## so that its state uniquely determines the overall Flow state
flow.set_reference_tasks([success])
flow.run()
# Functions
top-level functions: |
---|
prefect.triggers.all_finished (upstream_states)[source] |
This task will run no matter what the upstream states are, as long as they are finished.
|
prefect.triggers.manual_only (upstream_states)[source] |
This task will never run automatically, because this trigger will always place the task in a Paused state. The only exception is if the "resume" keyword is found in the Prefect context, which happens automatically when a task starts in a Resume state.
|
prefect.triggers.all_successful (upstream_states)[source] |
Runs if all upstream tasks were successful. Note that
|
prefect.triggers.all_failed (upstream_states)[source] |
Runs if all upstream tasks failed. Note that
|
prefect.triggers.any_successful (upstream_states)[source] |
Runs if any tasks were successful. Note that
|
prefect.triggers.any_failed (upstream_states)[source] |
Runs if any tasks failed. Note that
|
prefect.triggers.not_all_skipped (upstream_states)[source] |
Runs if all upstream tasks were successful and were not all skipped.
|
prefect.triggers.some_failed (at_least=None, at_most=None)[source] |
Runs if some amount of upstream tasks failed. This amount can be specified as an upper bound (
|
prefect.triggers.some_successful (at_least=None, at_most=None)[source] |
Runs if some amount of upstream tasks succeed. This amount can be specified as an upper bound (
|
This documentation was auto-generated from commit bd9182e
on July 31, 2024 at 18:02 UTC