Skip to main content

Multipurpose asyncio throttle

Project description

Async Throttle

Multipurpose concurrency primitive for asyncio coroutines.

Features

This throttle is configured with two related, but different parameters:

Throttle(capacity: float, concurrency: int = 0, period: float = 1.0)

capacity - Sets the rate limit for requests, as capacity per period seconds.

concurrency - The number of jobs that can be executing at a given time.

Usually, servers will set policies on both of these dimensions, and will suspend clients that violate either of them.

Throttle#pause(td: int)

The pause method will lock the throttle for the given number of seconds.

For example, if an API bans your client from accessing resources due to violating their rate-limit, you can tell your code to sleep for a period of time and try again later.

Usage

The throttle can be a drop-in replacement for another primitive like asyncio.Semaphore. In fact, it's really just an asyncio.Semaphore (which handles the concurrency limit) mixed with a token bucket to provide rate limiting.

throttle = Throttle(10, 2)  # Two concurrent coros limited to 10qps (total).

# Perform one task when the budget allows
async with throttle:
    # Do some (async) thing

# For tasks that should consume more of the budget, you can call the throttle:
async with throttle(5):
    # Do some more expensive thing, equivalent to 5 requests

Like other asyncio primitives, Throttle is not thread-safe.

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

async_throttle-1.0.0.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

async_throttle-1.0.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file async_throttle-1.0.0.tar.gz.

File metadata

  • Download URL: async_throttle-1.0.0.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Darwin/22.5.0

File hashes

Hashes for async_throttle-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9bb35cd57a55164c4f8c54bc15c0161b0068f89b4785caf468ab298c96ed1989
MD5 fdb8b6b9d5e00d64b9b3a959becc4e85
BLAKE2b-256 05cf7056117cb35d4f6040464e669b763103a6419d65c04af487f131b4ba79b6

See more details on using hashes here.

File details

Details for the file async_throttle-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: async_throttle-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Darwin/22.5.0

File hashes

Hashes for async_throttle-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db0df33190357548383e46b4e8189a81bb3e0bc609c9952f3ed3fa70dba1ce64
MD5 9877517715fe39f0686bd61921e799a8
BLAKE2b-256 c9125f26c43a09e194240927b00da3e2bccb24eea3bb4e3e0c3f25ce552b274f

See more details on using hashes here.

Supported by

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