我正在开发一个与 Web 服务 API 接口的 Python 库。像我遇到的许多 Web 服务一样,这一项请求限制了请求的速率。我想为limit
类实例化提供一个可选参数,如果提供,它将保持传出请求,直到指定的秒数过去。
我了解一般情况如下:该类的实例通过方法发出请求。当它发生时,该方法会发出一些信号,在某处设置一个锁定变量,并开始一个倒计时计时器,以计算limit
. (很可能,锁是倒数计时器本身。)如果在此时间范围内发出另一个请求,则必须排队,直到倒数计时器达到零并且锁被解除;此时,发送队列中最旧的请求,并重置倒数计时器并重新锁定。
这是线程的情况吗?还有另一种我没有看到的方法吗?
倒数计时器和锁应该是实例变量,还是应该属于类,以便类的所有实例都持有请求?
此外,在库中提供速率限制功能通常是一个坏主意吗?我的理由是,默认情况下,倒计时为零秒,该库仍然允许开发人员使用该库并提供他们自己的速率限制方案。但是,鉴于任何使用该服务的开发人员都需要对请求进行速率限制,但我认为库提供一种速率限制方法会很方便。
无论是否在库中放置速率限制方案,我都想使用该库编写一个应用程序,因此建议的技术将派上用场。