原有的 Flask 应用如何无缝接入现有 FastAPI 项目

前天的抽奖结果比较尴尬,当时是为了测试一下抽奖的流程,自己也参与了下,没想到中奖的就是自己。这次我决定送两本《代码大全2》,对,没错,就是下面这本珍藏版,文末抽两本:

好了,话不多说。接下来是今天的干货。

通常是先使用 Flask 开发了项目,后来又用 FastAPI 开发了几个接口,但是一时半会无法全部迁到 FastAPI,那么就需要让之前的 Flask 应用接入现有的 FastAPI 应用,然后有时间了再慢慢迁移。

比如说你之前的 Flask 项目是这样的;

文件名 flask_project.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Flask Index Page'

@app.route('/hello')
def hello():
    return 'Flask Hello, World'

现在,借助于 FastAPI 的 WSGIMiddleware,我们可以轻松的将 WSGI 应用作为 FastAPI 的一个子应用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要统计某个 FastAPI 接口的并发数,可以使用 Python 的 `concurrent.futures` 模块,结合 FastAPI 的 `Depends` 和 `FastAPIMiddleware`。具体步骤如下: 1. 定义一个全局变量 `concurrent_count`,用于记录当前并发数。 2. 定义一个线程池 `executor`,用于执行异步任务。 3. 定义一个 `FastAPIMiddleware`,在每个请求进入和离开时更新 `concurrent_count`。 4. 在需要统计并发数的接口函数中,使用 `Depends` 装饰器加载一个依赖函数,该函数返回一个异步可调用对象,使用线程池 `executor` 执行该对象,同时在异步函数中更新 `concurrent_count`。 下面是一个示例代码: ```python from concurrent.futures import ThreadPoolExecutor from fastapi import FastAPI, Depends from fastapi.middleware.wsgi import WSGIMiddleware from fastapi.responses import PlainTextResponse app = FastAPI() executor = ThreadPoolExecutor(max_workers=10) concurrent_count = 0 async def count_concurrent(): global concurrent_count concurrent_count += 1 return concurrent_count async def update_concurrent(result): global concurrent_count concurrent_count -= 1 return result @app.middleware("http") async def count_middleware(request, call_next): await count_concurrent() response = await call_next(request) return await update_concurrent(response) @app.get("/test", response_class=PlainTextResponse) async def test(dep: int = Depends(count_concurrent)): async def heavy_task(): # do some heavy task pass await executor.submit(heavy_task) return f"Current concurrent count: {concurrent_count}" ``` 在上面的示例代码中,我们定义了一个 `/test` 接口,该接口使用了 `Depends` 装饰器加载了一个依赖函数 `count_concurrent`,在该函数中更新了 `concurrent_count`。同时,我们使用了一个线程池 `executor`,在异步函数 `heavy_task` 中执行了一些耗时的任务。 在 `count_middleware` 中,我们在每个请求进入和离开时更新了 `concurrent_count`。最终,接口函数返回了当前的并发数。 注意,这只是一个示例代码,实际使用时需要根据自己的需求进行修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值