ITADN
wemake-services/asyncio-redis-rate-limit
wemake-services/asyncio-redis-rate-limit · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

asyncio-redis-rate-limit

wemake.services test codecov Python Version wemake-python-styleguide

使用 Redis 作为后端的异步函数速率限制器。

特性

  • 小巧且简单
  • 可作为装饰器或上下文管理器使用
  • 可用于客户端和服务器
  • 支持 asyncio
  • 支持任意数量的进程
  • 同时支持 redis.asyncio.client.Redisaioredis
  • 无竞态条件(希望如此!)
  • 7.0 起支持 redis
  • 完全使用类型注解,并通过 mypy 检查,兼容 PEP561

安装

pip install asyncio-redis-rate-limit

可用附加项:

  • pip install asyncio-redis-rate-limit[redis]
  • pip install asyncio-redis-rate-limit[aioredis](适用于 Python 版本 <3.11

示例

作为装饰器:

>>> 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.

或作为上下文管理器:

>>> 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.

许可证

MIT

致谢

本项目使用 wemake-python-package 生成。当前模板版本为:1d63652fbb33ebe2f6d932f511b7f529a4ce2d2a。查看自那以来的更新