python ratelimit模块
1.项目地址
https://github.com/tomasbasham/ratelimit
2.项目简介
这个项目的开发背景是考虑一些服务的API 对于开发人员的访问频率会做一些限制,如果不小心超出了这个限制,服务可能会禁止开发人员访问。
ratelimit 提供的装饰器,可以控制被装饰的函数在某个周期内被调用的次数不超过一个阈值,尽管作者本意是限制那些访问web API 的函数的调用次数,
但你可以推而广之,所有不能频繁调用的函数都可以用这个装饰器来修饰。
3.使用示例
# call_api这个函数在15分钟内最多只能调用15次,超出后就会报错
from ratelimit import limits, sleep_and_retry
import requests
FIFTEEN_MINUTES = 900
@sleep_and_retry #如果不加该装饰器,则如果超过调用阈值直接报错,加上后会等待
@limits(calls=15, period=FIFTEEN_MINUTES)
def call_api(url):
response = requests.get(url)
if response.status_code != 200:
raise Exception('API response: {}'.format(response.status_code))
return response
先使用limits 对call_api 进行装饰,再用sleep_and_retry 进行二次装饰,一旦超出访问限制,程序不会结束,sleep_and_retry会根据当前访问周期剩余时间进行sleep ,然后再次调用。
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少