fastapi设置接口的连接次数和频率

fastapi设置接口的连接频率和次数

起因

最近使用fastapi做了一个连接数据库的查询数据的api,结合前端做了一个查询看板,但是遇到一个问题,就是我如何保证这个接口的频率不是那么的高。降低数据库的检索压力。
在这里插入图片描述

解决思路

刚开始的想法是python做一个查询队列。因此看了python的很多多线程多进程的文章,但是我的python技术太菜了,我搞了两个星期没搞好,只学会了python的多线程多进程的子进程的通信。最后不用这个方法。

转折

我后来谷歌了一下关于这个fastapi的api的查询频率的设置。果然在StackOverflow上找到了如果限制fastapi的api的调用限制方法。
https://stackoverflow.com/questions/65491184/ratelimit-in-fastapi

按照里面的设置果然可以了。这个答案里面有两个方法,一个是python的slowapi包,一个是fastapi-limiter包。

虽然slowapi的github的star比fastapi-limiter包的star更多,但是我主观的使用了fastapi-limiter包。实际上,更加建议使用slowapi

解决办法

slowapi包解决办法
    1. 安装:pip install slowapi
    1. 直接使用:
from fastapi import FastAPI
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address


limiter = Limiter(key_func=get_remote_address)
app = FastAPI()
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)

@app.get("/home")
@limiter.limit("5/minute")
async def homepage(request: Request):
    return PlainTextResponse("test")

@app.get("/mars")
@limiter.limit("5/minute")
async def homepage(request: Request, response: Response):
    return {"key": "value"}
fastapi-limiter包解决办法
    1. 安装: pip install fastapi-limiter
    1. 安装redis
    1. 使用:

注意的是:fastapi-limiter包在启用的时候,需要打开redis

import aioredis
import uvicorn
from fastapi import Depends, FastAPI

from fastapi_limiter import FastAPILimiter
from fastapi_limiter.depends import RateLimiter

app = FastAPI()


@app.on_event("startup")
async def startup():
    redis = await aioredis.create_redis_pool("redis://localhost")
    FastAPILimiter.init(redis)


@app.get("/", dependencies=[Depends(RateLimiter(times=2, seconds=5))])
async def index():
    return {"msg": "Hello World"}


if __name__ == "__main__":
    uvicorn.run("main:app", debug=True, reload=True)

最后

更多的细节,可以看我上方的链接。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值