Skip to main content

Thread-safe rate limiter algorithms

Project description

keylimiter - A Thread-safe rate limiter for Python

PyPI version License: MIT License: MIT

Two of the most popular rate limiter algorithms: token bucket and sliding window counter.

it's "key"limiter to enphasize that it's a key based rate limiter, not a ip based rate limiter, so the key can be anything, like an ip, an user id, an url, etc.

Some use cases:

  • limit the number of requests per ip
  • limit likes per user in a post
  • limit the number of notifications per user

token bucket

SOME_IP = "111.222.1.1"

"""
:param int bucket_size: maximum number of tokens in the bucket
:param float refill_rate: token refill rate in seconds
:param Callable[[], float] time_func: function that returns the current time in seconds. Default: monotonic
"""
limiter = TokenBucketLimiter(bucket_size=3, refill_rate=1)

for _ in range(3):
    assert limiter.allow(SOME_IP) == True
    
assert limiter.allow(SOME_IP) == False

token bucket

sliding window counter

SOME_IP = "111.222.1.1"

"""
:param int max_requests: maximum number of requests in a window
:param str window_unit: "second" | "minute" | "hour". Default: "minute"
:param Callable[[], float] time_func: function that returns the current time in seconds. Default: monotonic
"""
limiter = SlidingWindowCounterLimiter(max_requests=3, window_unit="second")

for _ in range(3):
    assert limiter.allow(SOME_IP) == True
    
assert limiter.allow(SOME_IP) == False

sliding window counter

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

keylimiter-0.1.5.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

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

keylimiter-0.1.5-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file keylimiter-0.1.5.tar.gz.

File metadata

  • Download URL: keylimiter-0.1.5.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for keylimiter-0.1.5.tar.gz
Algorithm Hash digest
SHA256 6655240c15d1aee6acf26bd66bb1ae6c5dfd014e287f9c9c563dcfeacfc8fc81
MD5 a25e039f2d96a9e3a9779193aae00505
BLAKE2b-256 dfe2d3da04a3ce3a28d9553c3f0bc646abb345fd106c64e8e1cdb61fb4887161

See more details on using hashes here.

File details

Details for the file keylimiter-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: keylimiter-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 18.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for keylimiter-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 08d0f7b05133e3e2b7f7aab8e023a8881deb37ec213a3ff270d79876658ed2e5
MD5 b70d6cb58bebf48bad8172016730eb78
BLAKE2b-256 ea1120ecbfd26ea2f0715b8cd0308d2d1a6e3401f7395162a3fd4c7226b4b2a1

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