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提供商的规定限制。它能够平滑地限制请求速率,避免因短时间内大量请求而导致服务崩溃或被封禁。

相关推荐
hsjiasb4 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff5 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘5 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路6 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
XLYcmy6 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
虎头金猫6 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
从零开始学习人工智能6 小时前
WSL2部署CUDA12+cuDNN9踩坑实录:ONNX Runtime GPU推理环境搭建全流程
python
gugucoding6 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_380743876 小时前
从零调用 Claude 教程
开发语言·python·node.js
起床学FPGA7 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript