gpt4 book ai didi

Python API 速率限制 - 如何全局限制 API 调用

转载 作者:行者123 更新时间:2023-12-01 03:32:20 26 4
gpt4 key购买 nike

我正在尝试限制代码中的 API 调用。我已经找到了一个不错的 python 库 ratelimiter==1.0.2.post0 https://pypi.python.org/pypi/ratelimiter

但是,该库只能限制本地范围内的速率。即)在函数和循环中

# Decorator
@RateLimiter(max_calls=10, period=1)
def do_something():
pass


# Context Manager
rate_limiter = RateLimiter(max_calls=10, period=1)

for i in range(100):
with rate_limiter:
do_something()

因为我有多个函数在不同的地方进行 API 调用,所以我想将 API 调用限制在全局范围内。

例如,假设我想将 API 调用限制为每秒一次。并且,假设我有函数 xy,其中进行了两个 API 调用。

@rate(...)
def x():
...

@rate(...)
def y():
...

通过使用限制器修饰函数,我能够限制这两个函数的速率。

但是,如果我按顺序执行上述两个函数,它就会失去对全局范围内 API 调用数量的跟踪,因为它们彼此不知道。因此,y 将在执行 x 后立即调用,而无需等待一秒钟。而且,这将违反每秒一次限制。

有什么方法或库可以用来限制Python中全局的速率吗?

最佳答案

我遇到了同样的问题,我有一堆不同的函数调用相同的 API,我想在全局范围内进行速率限制。我最终做的是创建一个启用速率限制的空函数。

PS:我使用此处找到的不同速率限制库:https://pypi.org/project/ratelimit/

from ratelimit import limits, sleep_and_retry

# 30 calls per minute
CALLS = 30
RATE_LIMIT = 60

@sleep_and_retry
@limits(calls=CALLS, period=RATE_LIMIT)
def check_limit():
''' Empty function just to check for calls to API '''
return

然后我只需在调用 API 的每个函数的开头调用该函数即可:

def get_something_from_api(http_session, url):
check_limit()
response = http_session.get(url)
return response

如果达到限制,程序将休眠直到(在我的例子中)60 秒过去,然后正常恢复。

关于Python API 速率限制 - 如何全局限制 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748687/

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