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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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