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