Skip to main content

A simple throttling package

Project description

This library is inspired by this book and this implementation https://github.com/vostok/throttling.

Features:

  1. Set capacity(max parallel requests) and queue(max queued requests) limits.
  2. Per-consumer limits. For instance, to not allow any consumer to use more than 70% of service's capacity.
  3. Per-request priorities. For instance, to not allow requests with lowest priority to be queued or to now allow requests with normal priority to use more than 90% of service's capacity.

Example:

from aio_throttle import Throttler, MaxFractionCapacityQuota, ThrottlePriority, ThrottleResult

capacity_limit = 100
queue_limit = 200
consumer_quotas = [MaxFractionCapacityQuota(0.7)]
priority_quotas = [MaxFractionCapacityQuota(0.9, ThrottlePriority.NORMAL)]
throttler = Throttler(capacity_limit, queue_limit, consumer_quotas, priority_quotas)


consumer, priority = "yet another consumer", ThrottlePriority.HIGH
async with throttler.throttle(consumer=consumer, priority=priority) as result:
    ... # check if result is ThrottleResult.ACCEPTED or not

Example of an integration with aiohttp and prometheus_client

from aiohttp import web
from aiohttp.web_app import Application
from aiohttp.web_request import Request
from aiohttp.web_response import Response

from aio_throttle.aiohttp import throttling_middleware, setup_throttling
from aio_throttle.prometheus import prometheus_aware_throttler, build_throttle_results_counter

throttle_results_counter = build_throttle_results_counter()


async def ok(_: Request) -> Response:
    return Response()


async def create_app() -> Application:
    app = web.Application(middlewares=[throttling_middleware()])
    setup_throttling(app, extensions=[prometheus_aware_throttler(throttle_results_counter=throttle_results_counter)])
    app.router.add_get("/", ok)
    return app


web.run_app(create_app(), port=8080, access_log=None)

Project details


Download files

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

Files for aio-throttle, version 1.4.1
Filename, size File type Python version Upload date Hashes
Filename, size aio_throttle-1.4.1-py3-none-any.whl (8.6 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size aio-throttle-1.4.1.tar.gz (6.5 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page