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

相关推荐
用户03321266636713 分钟前
使用 Python 加密或解密 PDF 文档
python
小七-七牛开发者29 分钟前
让 Go 走得更远:用 LLGo 打通 Go 与 C/C++/Python 生态
python·编程·编译器·llvm·llgo
CyrusYiVPP2 小时前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
2601_967980112 小时前
Python中flatten( )函数及函数用法详解
python·numpy·数组操作·flatten函数·列表处理
xbzb2 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
噢,我明白了4 小时前
JAVA中的一些基础应用知识点
java·开发语言
时间的拾荒人5 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
敲上瘾5 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
合尘猫6 小时前
图片表格变结构化数据:OCR 后的三个坑
python·ocr
小小张说故事6 小时前
Python 里弱引用到底弱在哪:拆开 weakref.ref、回调陷阱和 WeakValueDictionary
python