使用FastAPI做人工智能后端服务器时,接口内的操作不是异步操作的解决方案

在做AI模型推理的接口时,这时候接口是非异步的,但是uvicorn运行FastAPI时就会出现阻塞所有请求。

这时候需要解决这个问题:

api.py

python 复制代码
import asyncio
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import time
import io
import uvicorn

app = FastAPI()


def my_io(num):
    print(num)
    time.sleep(20)

@app.get("/hello")
async def hello():
    loop = asyncio.get_event_loop()

    # my_io 里包含不支持异步操作的代码, 所以就使用线程池来配合实现了。
    future = loop.run_in_executor(None , my_io , 666)
    response = await future
    print("运行完成", response)
    return {"message" : "success"}

def read_image_data(image_path : str):
     with open(image_path , "rb") as fr:
            datas = fr.read()
            return datas

@app.get("/show_image/{image_path:path}")
async def show_image(image_path : str):
    datas = await asyncio.get_event_loop().run_in_executor(None , read_image_data , image_path)
    bytes = io.BytesIO(datas)
    return StreamingResponse(bytes , media_type="image/png")
    

if __name__ == "__main__":
    uvicorn.run("api:app", host="0.0.0.0", port=10001, reload=True)

完美解决!!!perfect!!!

相关推荐
YMWM_2 分钟前
python3中类的__call__()方法介绍
开发语言·python
一招定胜负2 分钟前
OpenCV DNN 实战:快速实现实时性别年龄检测
人工智能·opencv·dnn
dyxal4 分钟前
算子(Operator):深度学习的乐高积木
人工智能·深度学习
老百姓懂点AI6 分钟前
[数据工程] 告别脏数据:智能体来了(西南总部)AI调度官的自动化ETL清洗与AI agent指挥官的数据合成管线
人工智能·自动化·etl
Dingdangcat867 分钟前
【技术解析】TOOD-R101-FPN-MS-2x-COCO导弹目标检测模型实现与优化
人工智能·目标检测·计算机视觉
横木沉9 分钟前
Opencode启动时内置Bun段错误的解决笔记
人工智能·笔记·bun·vibecoding·opencode
柠檬07119 分钟前
cuda 安装记录
python
码农三叔10 分钟前
(9-2-01)电源管理与能源系统:能耗分析与功率管理(1)步行能耗估计
人工智能·嵌入式硬件·机器人·人机交互·能源·人形机器人
Monkey的自我迭代11 分钟前
实战项目数据桥agent复盘
数据库·python·oracle
SmartRadio15 分钟前
ESP32-S3对接豆包制作AI桌面数字收音机,桌面闹钟,桌面新闻播报器
人工智能·esp32·远程·虚拟键盘·虚拟鼠标