Python发布成AIP接口服务的几种方式

把 Python 代码发布成 API 服务接口,最常用的是 HTTP API,便于其他语言(如前端、Java、Go)调用。下面按常用程度分 4 种方案,从最简单到生产级:

1. 最轻量:Flask(适合快速原型)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/predict', methods=['POST'])
def predict():
    data = request.get_json()
    # 你的业务逻辑
    result = process_data(data)
    return jsonify({"result": result})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

启动:python app.py
调用:curl -X POST http://localhost:5000/predict -H "Content-Type: application/json" -d '{"key":"value"}'

2. 更现代异步:FastAPI(自动文档、高性能)

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class InputData(BaseModel):
    text: str
    threshold: float = 0.5

@app.post("/process")
async def process(data: InputData):
    # 你的逻辑
    result = {"output": data.text.upper(), "score": data.threshold}
    return result

# 访问 http://localhost:8000/docs 获得自动生成的API文档

启动:uvicorn main:app --reload --host 0.0.0.0 --port 8000

3. 函数即服务:使用 FaaS(免运维)

  • 阿里云函数计算、AWS Lambda、腾讯云云函数

  • 写一个入口函数,平台自动生成 API 网关

  • 优点:按调用计费、自动扩缩容

4. 已有模型文件(如.pkl/.h5)→ API

# 加载一次模型,避免每次请求时重新加载
import joblib
model = joblib.load("model.pkl")

@app.post("/predict")
def predict_single(features: dict):
    pred = model.predict([list(features.values())])
    return {"prediction": pred.tolist()}

生产级注意事项

  • 并发控制:使用 gunicorn -w 4 -k uvicorn.workers.UvicornWorker

  • 限流:slowapi(Flask)或 slowapi 的 FastAPI 版

  • 日志:结构化日志(JSON格式)

  • 容器化:写 Dockerfile,丢到 Kubernetes

  • 认证:API Key / JWT(Flask-JWT-Extended / FastAPI的OAuth2)

posted @ 2026-05-09 13:41  空指针的救赎  阅读(14)  评论(0)    收藏  举报