使用 FastAPI 在生产环境中部署 AI
Matt Eckerle
Software and Data Engineering Leader

可并发处理多个请求

@app.post("/analyze")
def analyze_sync(comment: Comment):
result = sentiment_model(comment.text)
return {"sentiment": result}
import asyncio
@app.post("/analyze")
async def analyze_async(comment: Comment):
result = await asyncio.to_thread(
sentiment_model, comment.text
)
return {"sentiment": result}
from fastapi import BackgroundTasks
from typing import List
@app.post("/analyze_batch")
async def analyze_batch(
comments: Comments,
background_tasks: BackgroundTasks
):
async def process_comments(texts: List[str]):
for text in texts:
result = await asyncio.to_thread(
sentiment_model, text)
background_tasks.add_task(process_comments,
comments.texts)
return {"message": "Processing started"}
BackgroundTasks 管理评论处理队列
background_tasks 负责响应后的处理。
add_task 异步调度 process_comments。@app.post("/analyze_comment")
async def analyze_comment(comment: Comment):
try:
sentiment_model = SentimentAnalyzer()
result = await asyncio.wait_for(
sentiment_model(comment.text),
timeout=5.0
)
return {"sentiment": result["label"]}
except asyncio.TimeoutError:
raise HTTPException(
status_code=408,
detail="Analysis timed out"
)
except Exception:
raise HTTPException(
status_code=500,
detail="Analysis failed"
)
使用 FastAPI 在生产环境中部署 AI