Skip to main content

Super naive python redis limiter

Project description

python version Build Status codecov PyPI version

python redis backed limiter

sliding log or fixed window limiter

This module mainly offer two limiter

  • FixedWindowLimiter
    simply using redis incr, which about 10 times the speed of the sliding version but the limit is not smooth, may overflow a threshold size near the gap between two intervals
  • SlidingWindowLimiter  
    using redis ordered set, slow but offers more smooth limit and more extendability

installation

pip install python-throttle

dummy example usage:

reminder: use name_space to avoid possible conflict on the same key

import time
from limiter import FixedWindowLimiter
TEST_REDIS_CONFIG = {'host': 'localhost','port': 6379,'db': 10}
ip = "who are you?"
throttle = FixedWindowLimiter(threshold=2, interval=3, redis_config=TEST_REDIS_CONFIG, name_space="default")
print("first time, blocked?: {}".format(throttle.exceeded(ip)))
print("second time, blocked?: {}".format(throttle.exceeded(ip)))
print("now I block you, blocked?: {}".format(throttle.exceeded(ip)))
time.sleep(3)
print("refill energy, blocked?: {}".format(throttle.exceeded(ip)))

ouput:

first time blocked?: False
second time blocked?: False
now I block you blocked?: True
refill energy blocked?: False

dummy beach mark

It is from my unittest and not accurate,

rate_counter_pressure_test: SlidingRedisCounter
rate_counter_pressure_test: SlidingRedisCounter time count: 1.0075314449495636
rate_counter_pressure_test: FixedWindowRedisCounter
rate_counter_pressure_test: FixedWindowRedisCounter time count: 0.13711917598266155

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

python-throttle-0.2.0.tar.gz (4.9 kB view hashes)

Uploaded Source

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