# Creating flow runs

Creating a flow run indicates to the backend that you'd like your flow to be executed. The backend will then place your flow run into a queue that agents poll. When your flow run is ready to execute, the agent will deploy the flow run to its infrastructure and the flow run will report its status to the backend.

If you're looking for documentation on how to set up a schedule that creates a flow run repeatedly, see the scheduling documentation

If you're looking for documentation on how to run a flow from the UI, see the UI documentation

# CLI

Flow runs can be created using the prefect run command in the CLI. To create a flow run, the associated flow must be registered with the backend. You can lookup the flow in the backend by:

  • --id: The UUID identifying the flow or flow group
  • --name: The name of the flow; if not unique you will need to provide --project as well
$ prefect run --name "hello-world"

By default, this command will create a flow run and return immediately. An agent will then detect the flow run and submit it for execution. Often, it's nice to watch the flow run execute. The --watch flag will continuously poll the Prefect backend for the state of the flow run and display flow run logs.

$ prefect run --name "hello-world" --watch

See prefect run --help or optional settings for additional flags that can be passed.

Local flow runs

prefect run can be used to execute a local flow as well if you provide a --path or a --module to load the flow from

Agentless flow run execution

prefect run can be used to create and execute a flow run in the current environment, without requiring an agent. Just provide the --execute flag. This allows you to take ownership of your flow's execution environment or run flows locally while retaining the benefits of the backend API. There are a few different behaviors from typical flow runs:

  • Other than environment variables, your RunConfig will be ignored; by using this, you are taking ownership of your flow's environment.
  • The flow run will be given a special label to indicate that it should not be picked up by an agent.
  • If the process executing the flow run fails, the flow run will be marked as failed.
  • If the flow run has a task with a long retry, the process will sleep. With agents, it would exit fully and be re-deployed when ready.
  • breakpoint() can be used in tasks to enter a debugging session with local executors

# Python client

Flow runs can be created using the Prefect Client interface in the prefect core Python library:

from prefect import Client

client = Client()
client.create_flow_run(flow_id="d7bfb996-b8fe-4055-8d43-2c9f82a1e3c7")

See optional settings for additional information that can be passed.

# Task

Flow runs can be created from within another flow run using the create_flow_run task in the Prefect task library:

from prefect import Flow
from prefect.tasks.prefect import create_flow_run, wait_for_flow_run

with Flow("parent-flow") as flow:
  # Create the child flow run, look up the flow by name
  child_run_id = create_flow_run(flow_name="hello-world")

  # Wait for the flow run to complete before considering this flow run done
  # This is optional, this flow could exit and leave the other one running
  wait_for_flow_run(child_run_id)

See optional settings for additional information that can be passed.

# GraphQL GQL

To create a flow run for a specific flow, the create_flow_run mutation can be called:

mutation {
  create_flow_run(input: { flow_id: "d7bfb996-b8fe-4055-8d43-2c9f82a1e3c7" }) {
    id
  }
}

See optional settings for additional options that can be passed.

# Optional settings

# Parameters

A flow run can be provided new parameters.

# Flow run names

By default, a flow run is given an automatically generated name. However, a custom run name can be passed.

# Start times

Flows can be assigned a start time in the future rather than being marked for execution immediately.

Generating time strings for GraphQL

GraphQL expects ISO formatted datetime strings. This is default when you cast a pendulum.DateTime to a string. You can also explicitly call the conversion pendulum.now().isoformat() in newer versions of pendulum.

# Idempotency

If you provide an idempotency_key when creating a flow run, you can safely attempt to recreate that run again without actually recreating it. This is helpful when you have a substandard network connection or when you're worried about redundancy in your run triggers. Note that idempotency keys do not expire. To create a new run, a new idempotency key must be provided.

# Flow groups vs flows

For flows which update regularly, you can provide a flow_group_id instead of a flow_id. If provided, the unique unarchived flow within the flow group will be scheduled for execution.