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

相关推荐
Raas10037 分钟前
AI网关和OpenRouter区别?MAI Gateway(魔芋企业级AI网关)企业级方案对比指南
大数据·开发语言·人工智能·gateway·php·ai网关·mai gateway
2601_962293248 小时前
Python自动化统计团队工作量并生成可视化仪表盘的脚本方案【指导】
python·数据分析·自动化·可视化·仪表盘
点心的游戏开发世界8 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
2601_962293799 小时前
OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务
python·自动化·批处理脚本·ocrmypdf·ocr任务
事圆则缓10 小时前
Kotlin 协程完全指南
开发语言·kotlin
我爱写代码i11 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路11 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
2601_9620777111 小时前
基于Python与NLP的新闻事件信息抽取实战:从NER到时空标准化
python·nlp·transformers·spacy·新闻事件抽取
JavaPub-rodert12 小时前
LangChain 从入门到 Agent 实战:用 Python 搭建一个真正能调用工具和知识库的 AI 助手
人工智能·python·langchain
统计学小王子12 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言