Rate limiter for async functions using Redis as a backend.
- Small and simple
- Can be used as a decorator or as a context manager
- Can be used for both clients and servers
- Works with
asyncio
- Works with any amount of processes
- Works with both
redis.asyncio.client.Redis
andaioredis
- Free of race-conditions (hopefully!)
- Supports
redis
since7.0
- Fully typed with annotations and checked with mypy, PEP561 compatible
pip install asyncio-redis-rate-limit
Extras available:
pip install asyncio-redis-rate-limit[redis]
pip install asyncio-redis-rate-limit[aioredis]
(for python versions<3.11
)
As a decorator:
>>> from asyncio_redis_rate_limit import rate_limit, RateSpec
>>> from redis.asyncio import Redis as AsyncRedis # pip install redis
>>> redis = AsyncRedis.from_url('redis://localhost:6379')
>>> @rate_limit(
... rate_spec=RateSpec(requests=1200, seconds=60),
... backend=redis,
... )
... async def request() -> ...:
... ... # Do something useful! Call this function as usual.
Or as a context manager:
>>> from asyncio_redis_rate_limit import RateLimiter, RateSpec
>>> from redis.asyncio import Redis as AsyncRedis # pip install redis
>>> redis = AsyncRedis.from_url('redis://localhost:6379')
>>> async def request() -> ...:
... async with RateLimiter(
... unique_key='api-name.com',
... backend=redis,
... rate_spec=RateSpec(requests=5, seconds=1),
... ):
... ... # Do the request itself.
This project was generated with wemake-python-package
. Current template version is: 1d63652fbb33ebe2f6d932f511b7f529a4ce2d2a. See what is updated since then.