python-throttle 0.2.0

Creator: bradpython12

Last updated:

Add to Cart

Description:

pythonthrottle 0.2.0

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

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.