Learn how to control concurrency and apply rate limits using Prefect’s provided utilities.
TaskGroup
in asynchronous programming. These general “tasks” could include Prefect
tasks when they are part of an asynchronous execution environment.slot_decay_per_second
. With a concurrency limit, slots are released when the concurrency manager exits.
/
, %
, &
, >
, <
, are not allowed.rate_limit
function.active
or inactive
state:
slot_decay_per_second
).slot_decay_per_second
parameter when creating or updating a concurrency limit. This value determines how quickly slots refresh:
prefect gcl create
command. You must specify a --limit
argument, and can optionally specify a
--slot-decay-per-second
and --disable
argument.
prefect gcl inspect
command:
prefect gcl update
command. You can update the --limit
, --slot-decay-per-second
, --enable
,
and --disable
arguments:
prefect gcl delete
command:
prefect gcl --help
.
concurrency
context managerconcurrency
context manager allows control over the maximum number of concurrent operations. Select either the synchronous (sync
)
or asynchronous (async
) version, depending on your use case. Here’s how to use it:
concurrency
context manager, if the provided names
of the concurrency limits don’t already exist, then no limiting is enforced and a warning will be logged.
For stricter control, use strict=True
to instead raise an error if no matching limits exist to block execution of the task.prefect.concurrency.sync
module for sync usage
and the prefect.concurrency.asyncio
module for async usage.process_data
task, taking x
and y
as input arguments. Inside this task, the concurrency context manager controls
concurrency, using the database
concurrency limit and occupying one slot. If another task attempts to run with the same limit and no
slots are available, that task is blocked until a slot becomes available.my_flow
is defined. Within this flow, it iterates through a list of tuples, each containing pairs of x and y values.
For each pair, the process_data
task is submitted with the corresponding x and y values for processing.rate_limit
rate_limit
to govern both synchronous (sync) and asynchronous (async) operations.
Here’s how to make the most of it:
rate_limit
function, the concurrency limit must have a slot decay configured.rate_limit
function. Use the prefect.concurrency.sync
module for sync usage and the
prefect.concurrency.asyncio
module for async usage.make_http_request
task. Inside this task, the rate_limit
function ensures that the requests are made at a controlled pace.my_flow
is defined. Within this flow the make_http_request
task is submitted 10 times.concurrency
and rate_limit
outside of a flowconcurrency
and rate_limit
outside of a flow to control concurrency and rate limits for any operation.
rate_limit
function throttles the submission of tasks. The rate limit acts as a bottleneck, ensuring
that tasks are submitted at a controlled rate, governed by the slot_decay_per_second
setting on the associated concurrency limit.
database
. It has a maximum concurrency limit that matches the maximum number
of database connections. The concurrency
context manager controls the number of database connections
allowed at any one time.
process_data
tasks to five at any one time. The concurrency
context manager requests five slots on the data-processing
concurrency limit. This blocks until five slots are free and then
submits five more tasks, ensuring that the maximum number of parallel processing tasks is never exceeded.