跳转到主要内容

asyncio速率限制

项目描述

https://img.shields.io/pypi/v/aiosteady.svg https://github.com/Tinche/aiosteady/workflows/CI/badge.svg https://codecov.io/gh/Tinche/aiosteady/branch/master/graph/badge.svg Supported Python versions https://img.shields.io/badge/code%20style-black-000000.svg

aiosteady是一个MIT许可的库,用Python编写,用于使用Redis和aioredis库在asyncio应用程序中进行速率限制。

aiosteady目前以非常有效的方式实现了漏桶算法

max_capacity = 10  # The bucket can contain up to 10 drops, starts with 0
drop_recharge = 5.0  # 5 seconds between drop recharges.
throttler = Throttler(aioredis, max_capacity, drop_recharge)

# consume() returns information about success, the current bucket level,
# how long until the next drop recharges, etc.
res = await throttler.consume(f'user:{user_id}')

安装

要安装aiosteady,只需

$ pip install aiosteady

用法

漏桶算法遵循一个简单的模型。

  • 一个桶包含一定数量的水滴,称为桶级别。桶从零滴开始。

  • 桶具有最大水滴容量。

  • 每次使用桶(消耗)都会在桶中插入一个或多个水滴,直到最大容量。如果桶会溢出,则消耗失败。

  • 每秒会泄漏出一个水滴,每秒释放空间以便将新的水滴放入桶中。

  • 桶还可以手动排空。

  • 除了使消耗失败外,满桶还可以配置为在一段时间内阻止进一步消耗尝试。

创建一个aiosteady.leakybucket.Throttler实例,给它一个aioredis客户端实例和速率限制参数(最大桶容量、水滴泄漏所需的时间以及可选的阻塞持续时间)。

Throttler支持两种操作:消耗和窥视。

  • await Throttler.consume("a_key") (因为消耗桶资源称为 consume)尝试将指定数量的滴(默认1)放入指定的键的桶中。它返回一个 aiosteady.leakybucket.ThrottleResult 实例,包含以下字段:

    • success:一个布尔值,描述消耗是否成功

    • level:一个整数,描述桶的新水平

    • until_next_drop:一个浮点数,描述下一次滴再生后的剩余秒数

    • blocked_for:一个可选的浮点数,如果正在使用阻塞且桶被阻塞,则表示阻塞到期前的秒数

    如果给定的滴的数量为负数,则相反地从桶中移除滴。桶的滴数可能不会低于零。

  • await Throttler.peek("a_key") 返回相同的 ThrottleResult,但不尝试消耗任何滴。

这两个操作都使用 Lua 脚本通过单个 Redis 调用来实现。

变更日志

22.1.0(未发布)

  • 切换到 CalVer。

  • 添加 Python 3.10 支持。

  • 添加对充电桶(移除现有滴)的支持。

  • 将主分支名称从 master 切换到 main

0.2.1 (2021-05-12)

  • 改进 attrs 依赖规范,因为 attrs 使用 CalVer。

0.2.0 (2021-04-08)

  • 使用 Redis 的 evalsha 而不是 eval,以提高效率。

0.1.0 (2021-03-07)

  • 初始发布。

致谢

原子漏桶的 Lua Redis 脚本已被采纳并做了大量修改,来源于 Prorate 项目。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分布

aiosteady-22.1.0.tar.gz (6.2 kB 查看哈希值)

上传时间

构建分布

aiosteady-22.1.0-py3-none-any.whl (7.2 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面