gpt4 book ai didi

python - 如何在 Python 中限制对 Web 服务的请求速率?

转载 作者:太空狗 更新时间:2023-10-29 20:17:43 27 4
gpt4 key购买 nike

我正在开发一个与 Web 服务 API 交互的 Python 库。像我遇到的许多 Web 服务一样,这个请求限制了请求的速率。我想为类实例化提供一个可选参数 limit,如果提供,它将保留传出请求,直到指定的秒数过去。

据我了解,一般情况如下:类的实例通过方法发出请求。当它这样做时,该方法会发出一些信号,在某处设置一个锁定变量,并开始倒计时 limit 中的秒数。 (很可能,锁就是倒数计时器本身。)如果在此时间范围内发出另一个请求,则它必须排队,直到倒数计时器达到零并解除锁;此时,队列中最早的请求被发送,倒计时计时器被重置,锁被重新锁上。

这是线程的情况吗?还有其他我没有看到的方法吗?

倒数计时器和锁应该是实例变量,还是应该属于类,以便类的所有实例都持有请求?

此外,在库中提供速率限制功能通常不是一个好主意吗?我的理由是,默认情况下,倒计时为零秒,该库仍然允许开发人员使用该库并提供他们自己的速率限制方案。然而,鉴于任何使用该服务的开发人员都需要对请求进行速率限制,我认为图书馆提供一种速率限制方法会很方便。

无论是否在库中放置速率限制方案,我都想使用该库编写应用程序,因此建议的技术会派上用场。

最佳答案

除非万不得已,否则不要重新发明轮子。查看很棒的图书馆 ratelimit .如果你只是想出于任何原因限制你对 rest api 的调用并继续你的生活,那就太完美了。

from datetime import timedelta
from ratelimit import limits, sleep_and_retry
import requests

@sleep_and_retry
@limits(calls=1, period=timedelta(seconds=60).total_seconds())
def get_foobar():
response = requests.get('https://httpbin.org/get')
response.raise_for_status()
return response.json()

如果发出的请求超过每分钟一个,这将阻塞线程。

关于python - 如何在 Python 中限制对 Web 服务的请求速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/401215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com