prefect.concurrency.sync

Functions

concurrency

concurrency(names: Union[str, list[str]], occupy: int = 1, timeout_seconds: Optional[float] = None, max_retries: Optional[int] = None, strict: bool = False) -> Generator[None, None, None]

A context manager that acquires and releases concurrency slots from the given concurrency limits.

Args:

  • names: The names of the concurrency limits to acquire slots from.
  • occupy: The number of slots to acquire and hold from each limit.
  • timeout_seconds: The number of seconds to wait for the slots to be acquired before raising a TimeoutError. A timeout of None will wait indefinitely.
  • max_retries: The maximum number of retries to acquire the concurrency slots.
  • strict: A boolean specifying whether to raise an error if the concurrency limit does not exist. Defaults to False.

Raises:

  • TimeoutError: If the slots are not acquired within the given timeout.
  • ConcurrencySlotAcquisitionError: If the concurrency limit does not exist and strict is True.

Example: A simple example of using the sync concurrency context manager:

from prefect.concurrency.sync import concurrency

def resource_heavy():
    with concurrency("test", occupy=1):
        print("Resource heavy task")

def main():
    resource_heavy()

rate_limit

rate_limit(names: Union[str, list[str]], occupy: int = 1, timeout_seconds: Optional[float] = None, strict: bool = False) -> None

Block execution until an occupy number of slots of the concurrency limits given in names are acquired. Requires that all given concurrency limits have a slot decay.

Args:

  • names: The names of the concurrency limits to acquire slots from.
  • occupy: The number of slots to acquire and hold from each limit.
  • timeout_seconds: The number of seconds to wait for the slots to be acquired before raising a TimeoutError. A timeout of None will wait indefinitely.
  • strict: A boolean specifying whether to raise an error if the concurrency limit does not exist. Defaults to False.

Raises:

  • TimeoutError: If the slots are not acquired within the given timeout.
  • ConcurrencySlotAcquisitionError: If the concurrency limit does not exist and strict is True.