Skip to main content

Bulkhead middleware implementation for Swarmauri

Project description

Swarmauri Logo

PyPI - Downloads Hits PyPI - Python Version PyPI - License PyPI - swarmauri_middleware_bulkhead


Swarmauri Middleware Bulkhead

Concurrency isolation middleware for FastAPI applications. Limit the number of simultaneous requests to protect resources from overload and ensure reliable service operation.

Features

  • Concurrency control restricts the number of in-flight requests using an asyncio.Semaphore.
  • Configurable limits let you tune max_concurrency (default: 10) to match service capacity.
  • Fail-fast validation guards against non-positive concurrency limits at initialization.
  • Structured logging surfaces request flow and failure details for easier diagnostics.
  • FastAPI compatibility enables seamless integration into ASGI middleware stacks.

Installation

Choose the tool that matches your workflow:

# pip
pip install swarmauri_middleware_bulkhead

# Poetry
poetry add swarmauri_middleware_bulkhead

# uv
uv add swarmauri_middleware_bulkhead

Quickstart

The middleware wraps a call_next handler and ensures that no more than max_concurrency requests execute at once. Run the example below with python quickstart.py to see the concurrency ceiling in action.

import asyncio

from fastapi import Request

from swarmauri_middleware_bulkhead import BulkheadMiddleware


async def main() -> None:
    bulkhead = BulkheadMiddleware(max_concurrency=2)
    active_requests = 0
    peak_active_requests = 0
    lock = asyncio.Lock()

    async def call_next(request: Request):
        nonlocal active_requests, peak_active_requests
        async with lock:
            active_requests += 1
            peak_active_requests = max(peak_active_requests, active_requests)

        try:
            await asyncio.sleep(0.05)
            return {"path": request.scope.get("path"), "handled": True}
        finally:
            async with lock:
                active_requests -= 1

    async def simulate_request(idx: int):
        request = Request(scope={"type": "http", "path": f"/task/{idx}"})
        return await bulkhead.dispatch(request, call_next)

    responses = await asyncio.gather(*(simulate_request(i) for i in range(5)))

    assert peak_active_requests <= bulkhead.max_concurrency
    print("Peak concurrent requests:", peak_active_requests)
    print("Responses:", responses)


if __name__ == "__main__":
    asyncio.run(main())

Want to help?

If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swarmauri_middleware_bulkhead-0.8.0.dev46.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file swarmauri_middleware_bulkhead-0.8.0.dev46.tar.gz.

File metadata

  • Download URL: swarmauri_middleware_bulkhead-0.8.0.dev46.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_middleware_bulkhead-0.8.0.dev46.tar.gz
Algorithm Hash digest
SHA256 36ebb6255103e6dc445518e82f8a55e79b481ef12bbcf7cfd0bf41fbd5b986c1
MD5 035b7fe6a38d836edc5fed5f5cf318da
BLAKE2b-256 06245b1448135989b36b6e1f51d5417531d98404d7a407087f05a3817341ac94

See more details on using hashes here.

File details

Details for the file swarmauri_middleware_bulkhead-0.8.0.dev46-py3-none-any.whl.

File metadata

  • Download URL: swarmauri_middleware_bulkhead-0.8.0.dev46-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for swarmauri_middleware_bulkhead-0.8.0.dev46-py3-none-any.whl
Algorithm Hash digest
SHA256 f7e2faf6d7fc5fb2d86e17ae39dc0ceacbbcb7b4f4ca7572112f56f246521b16
MD5 56379e9c6d7752fd36ee5e5514214e5c
BLAKE2b-256 c09e6f49f7bdcf2747c1ba7cda0ee28ca522eda1999e1d679f535d98b6c3f35a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page