我正在尝试根据以下限制费率来限制我的 API 调用。为了实现这一目标,我尝试使用 python 中的
ratelimit
。
我可以根据速率限制使用每秒限制,如下所示:
from ratelimit import limits, sleep_and_retry
SEC_CALLS = 10
SEC_RATE_LIMIT = 1
@sleep_and_retry
@limits(calls=SEC_CALLS, period=SEC_RATE_LIMIT)
def check_limit_secs():
print(f'sec time: {time.time()}')
return
##Function Code:
for i in ID:
check_limit_secs()
url = 'https://xxxxxx{}'.format(ID)
headers = {
'Accept': 'application/json'
}
response = requests.get(url, headers=headers)
# Check the response status
if response.status_code == 200:
# Do something with the response data (e.g., print it)
print(i)
# print(response.json())
else:
# Print an error message if the request was not successful
print(f"Error: {response.status_code} - {response.text}")
这段代码阻止我在 1 秒后访问 API,但我也想根据 1 分钟和 30 分钟来限制它。
仅供参考:我的代码每秒命中 25 个请求,这意味着 10 秒后,我的每个限制率将达到。这意味着我的代码应该停止大约 50 秒才能完全满足每分钟的限制。
我必须使用
ratelimit
拨打多个电话吗?
或者使用
tenacity
代替...
from tenacity import retry, stop_after_attempt, wait_random_exponential
@retry(
reraise=True,
wait=wait_random_exponential(min=0.1, max=10),
stop=stop_after_attempt(3),
)
def check_limit(...):
.... your code