Asynkron bearbetning

Driftsättning av AI i produktion med FastAPI

Matt Eckerle

Software and Data Engineering Leader

Vad är asynkron bearbetning

En person som serverar en dryck till någon som sitter vid ett bord

 

Hanterar flera förfrågningar samtidigt

Driftsättning av AI i produktion med FastAPI

Synkrona vs asynkrona förfrågningar

Ett diagram som visar skillnaden i bearbetningstid för synkrona och asynkrona förfrågningar

Driftsättning av AI i produktion med FastAPI

Göra synkrona endpoints asynkrona

 

@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}
Driftsättning av AI i produktion med FastAPI

Implementera bakgrundsuppgifter

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 hanterar kön för kommentarsbearbetning

 

  • background_tasks sköter bearbetning efter svar.

 

  • add_task schemalägger process_comments asynkront.
Driftsättning av AI i produktion med FastAPI

Lägga till felhantering

@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"]}
Driftsättning av AI i produktion med FastAPI

Lägga till felhantering

    except asyncio.TimeoutError:
        raise HTTPException(
            status_code=408,
            detail="Analysis timed out"
        )
    except Exception:
        raise HTTPException(
            status_code=500,
            detail="Analysis failed"
        )
Driftsättning av AI i produktion med FastAPI

Nu kör vi en övning!

Driftsättning av AI i produktion med FastAPI

Preparing Video For Download...