API 请求速率限制器的功能

问题描述 投票:0回答:1

我正在尝试根据以下限制费率来限制我的 API 调用。为了实现这一目标,我尝试使用 python 中的

ratelimit

  • 每秒:25 个请求
  • 每分钟:250 个请求
  • 每 30 分钟:1,000 个请求

我可以根据速率限制使用每秒限制,如下所示:

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
拨打多个电话吗?

python rate-limiting
1个回答
0
投票

或者使用

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
© www.soinside.com 2019 - 2024. All rights reserved.