【发布时间】:2016-11-22 18:03:11
【问题描述】:
我正在尝试在我的代码中限制 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 调用限制在 global 范围内。
例如,假设我想将 API 调用限制为每秒一次。并且,假设我有函数 x 和 y,其中进行了两个 API 调用。
@rate(...)
def x():
...
@rate(...)
def y():
...
通过使用limiter 修饰函数,我可以限制这两个函数的速率。
但是,如果我按顺序执行上述两个函数,它会失去对 global 范围内 API 调用数量的跟踪,因为它们彼此不知道。因此,y 将在x 执行后立即被调用,无需再等待一秒钟。而且,这将违反每秒一次的限制。
我可以使用任何方法或库来限制python中全局的速率吗?
【问题讨论】:
标签: python api rate-limiting