API速率限制修饰符

ratelimit的Python项目详细描述


api是与web服务交互的一种非常常见的方式。根据需要 消耗数据的数量在增长,保持 数据源的日期。然而,许多api提供者限制开发人员 调用太多的api。这就是所谓的限速,在最坏的情况下 假设您的应用程序可以被禁止进行进一步的api调用 滥用这些限制。

这个包引入了一个函数装饰器来防止函数 调用的频率高于api提供程序所允许的频率。这应该可以防止 API供应商不得通过遵守其费率来禁止您的应用程序 限制。

安装

Pypi

要安装RateLimit,只需:

$ pip install ratelimit

Github

从github安装最新版本:

$ git clone https://github.com/tomasbasham/ratelimit
$ cd ratelimit
$ python setup.py install

用法

要使用此包,只需修饰任何进行api调用的函数:

fromratelimitimportlimitsimportrequestsFIFTEEN_MINUTES=900@limits(calls=15,period=FIFTEEN_MINUTES)defcall_api(url):response=requests.get(url)ifresponse.status_code!=200:raiseException('API response: {}'.format(response.status_code))returnresponse

此函数在15分钟内无法进行超过15个API调用 时间段。

传递给decorator的参数描述函数的数量 在指定的时间段内(以秒为单位)允许调用。如果没有时间段 则默认为15分钟(由 推特)。

如果修饰函数的调用次数超过 指定的时间段则引发ratelimit.RateLimitException。这个 可用于实现重试策略,如expoential backoff

fromratelimitimportlimits,RateLimitExceptionfrombackoffimporton_exception,expoimportrequestsFIFTEEN_MINUTES=900@on_exception(expo,RateLimitException,max_tries=8)@limits(calls=15,period=FIFTEEN_MINUTES)defcall_api(url):response=requests.get(url)ifresponse.status_code!=200:raiseException('API response: {}'.format(response.status_code))returnresponse

或者使当前线程睡眠到指定的时间 句点已删除,然后使用^{tt2}重试该函数$ 装饰工。这确保了在 停止线程的成本。

fromratelimitimportlimits,sleep_and_retryimportrequestsFIFTEEN_MINUTES=900@sleep_and_retry@limits(calls=15,period=FIFTEEN_MINUTES)defcall_api(url):response=requests.get(url)ifresponse.status_code!=200:raiseException('API response: {}'.format(response.status_code))returnresponse

贡献

  1. 分叉(https://github.com/tomasbasham/ratelimit/fork
  2. 创建您的功能分支(git checkout-b my new feature
  3. 提交更改(git commit-am'add some feature'
  4. 推到分支(git push origin my new feature
  5. 创建新的拉取请求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将中心面板添加到“我的内容”窗格时,java GUI对象消失   java无法更新oracle中的clob字段   php Linux+动态插入的Java小程序=在NPObject上调用方法时出错   java JVisualVM探查器代理jar已加载,但代理初始化失败   java Android在运算符和TextView值方面存在问题   用于OpenPGP智能卡小程序的rsa解密APDU   Java GUI按钮不会添加到面板中   java找不到移动图像(或其他可单击对象)的方法   java中Do/While循环的问题   多线程使java程序在没有线程的情况下休眠   java如何在Webflux功能端点的测试中禁用Spring安全性   如果存在后退历史记录,则java WebView仅显示后退按钮   通过USB将Arduino中显示的java错误数据传输到Android   java如何使用安卓 studio从4层父节点firebase获取子节点数据   jpanel中JLabel的java搜索栏   来自gallery/camera的java Android图像预览不同