A proactive rate-limiting tool utilizing Redis.
Users can actively limit the call frequency of functions or methods, and calls that would cause exceeding the limit will be delayed until they can be executed.
$ pip install client_throttler
-
[Optional] Configure a default config for all Throttler rate limiters.
from redis.client import Redis from client_throttler import setup, ThrottlerConfig setup(ThrottlerConfig(redis_client=Redis(host="localhost", port=1234, db=1), rate="100/s"))
-
Simply add a decorator to the function or method that needs to have its calls limited.
from redis.client import Redis from client_throttler import throttler, ThrottlerConfig, Throttler redis_client = Redis(host="localhost", port=1234, db=2) # use default config @throttler() def func_a(*args, **kwargs): return args, kwargs # use default config, and change custom config @throttler(ThrottlerConfig(rate="1/2s")) def func_b(*args, **kwargs): return args, kwargs # use default config, and change redis client and some custom config @throttler(ThrottlerConfig(rate="1/2s", redis_client=redis_client)) def func_c(*args, **kwargs): return args, kwargs # change a callable into throttled callable def func_d(*args, **kwargs): return args, kwargs func = Throttler(ThrottlerConfig(func=func_d)) func(*args, **kwargs)
-
[Optinal] get metric data
from redis.client import Redis from client_throttler import MetricManager, ThrottlerConfig, Throttler redis_client = Redis(host="localhost", port=1234, db=2) def func_a(*args, **kwargs): return args, kwargs # enable_metric_record=True should be set when collect metric config = ThrottlerConfig(func=func_a, redis_client=redis_client, rate="100/s", enable_metric_record=True) func = Throttler(config) """ call your func """ metrics = MetricManager(config).load_metrics()
Based on the MIT protocol. Please refer to LICENSE