用 Python 编写一个程序,定义支持用户速率限制检查的数据结构
pythonserver side programmingprogramming更新于 2026/1/3 8:12:17
假设我们想要开发一个可以建立到期时间的数据结构,并支持一个接受用户 ID 和时间戳的函数。这将检查给定 user_id 的用户在给定时间戳的请求是否失败。仅当用户在给定的过期时间之前成功请求时,它才会失败。
因此,如果输入类似于 expire = 6,则构造一个对象 obj,并调用函数 obj.limit(0,10)、obj.limit(0,16)、obj.limit(0,17) 和 obj.limit(1,20),则输出将分别为 False、False、True 和 False,因为对于用户 0,最初没有请求,因此它是假的,然后在时间 16 它不大于过期时间 6 比最后一个请求 10,但在 17 它是真的,对于最后一个请求,它是针对用户 1 的,所以初始请求是假的。
为了解决这个问题,我们将遵循以下步骤 −
定义构造函数。这将需要 expire
- lastCall := 创建一个默认值为 -1 的字典
- 定义一个函数 limit() 。这将需要 uid、timestamp
- last := lastCall[uid]
- 如果 last 与 -1 相同或 (last + expire) <= timestamp,则
- lastCall[uid] := timestamp
- 返回 False
- 返回 True
示例
让我们看看下面的实现以便更好地理解 −
from collections import defaultdict class RateLimit: def __init__(self, expire): self.expire = expire self.lastCall = defaultdict(lambda: -1) def limit(self, uid, timestamp): last = self.lastCall[uid] if last == -1 or last + self.expire <= timestamp: self.lastCall[uid] = timestamp return False return True expire = 6 obj = RateLimit(expire) print(obj.limit(0,10)) print(obj.limit(0,16)) print(obj.limit(0,17)) print(obj.limit(1,20))
输入
RateLimit(6) obj.limit(0,10) obj.limit(0,16) obj.limit(0,17) obj.limit(1,20)
输出
False False True False
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

