python限制调用接口速度

import time
import requests
import pandas as pd
from concurrent.futures import ThreadPoolExecutor


class RateLimiter:
    def __init__(self, max_calls, period):
        self.max_calls = max_calls
        self.period = period
        self.calls = 0
        self.reset_time = time.time()

    def can_call(self):
        current_time = time.time()
        if current_time - self.reset_time > self.period:
            self.reset_time = current_time
            self.calls = 0
        return self.calls < self.max_calls

    def called(self):
        self.calls += 1

在这里,RateLimiter类通过在指定时间段内限制最大调用次数来实现速率限制。构造函数__init__接受两个参数:max_calls表示最大调用次数,period表示时间段(以秒为单位)。

类中的can_call方法用于判断是否可以进行调用。它首先检查当前时间与上次重置时间之间的时间差是否超过设定的时间段。如果超过了时间段,则重置计数器,并更新重置时间和调用次数。最后,判断调用次数是否小于最大调用次数,如果是则返回True,表示可以进行调用;否则返回False,表示已经达到限制。

called方法用于在每次调用后更新调用次数。当函数或接口被调用时,应该在合适的位置调用called方法,以便在限制内适当增加调用次数。

这种速率限制器通常用于控制对外部API的访问次数,以免超出API提供商的规定限制。它能够平滑地限制请求速率,避免因短时间内大量请求而导致服务崩溃或被封禁。

相关推荐
终极定律15 分钟前
qt:输入控件操作
开发语言·qt
明月清风徐徐20 分钟前
Miniconda + VSCode 的Python环境搭建
ide·vscode·python
JenKinJia30 分钟前
Windows10配置C++版本的Kafka,并进行发布和订阅测试
开发语言·c++
煤炭里de黑猫32 分钟前
Lua C API :lua_insert 函数详解
开发语言·lua
笨鸟笃行34 分钟前
爬虫第七篇数据爬取及解析
开发语言·爬虫·python
编程乐趣35 分钟前
一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略来了!
开发语言·c#
java1234_小锋40 分钟前
一周学会Flask3 Python Web开发-response响应格式
开发语言·python·flask·flask3
Jelena1577958579240 分钟前
使用Java爬虫获取1688 item_get_company 接口的公司档案信息
java·开发语言·爬虫
大数据追光猿41 分钟前
Python中的Flask深入认知&搭建前端页面?
前端·css·python·前端框架·flask·html5
java1234_小锋42 分钟前
一周学会Flask3 Python Web开发-flask3模块化blueprint配置
开发语言·python·flask·flask3