Bootcamp i backendutveckling med FastAPI · Lektion

FastAPI och asynkrona operationer

Förstå hur FastAPI hanterar asynkrona funktioner på ett naturligt sätt och hur ni skriver effektiv, icke-blockerande kod.

Lektion 2 av 411 steg

FastAPI och asynkrona operationer är en gratis lektion i Bootcamp i backendutveckling med FastAPI på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Bootcamp i backendutveckling med FastAPI, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bootcamp i backendutveckling med FastAPI innehåller totalt 4 lektioner.

FastAPI:s asynkrona grund

FastAPI är byggt för snabbhet! Det använder Pythons asynkrona funktioner för att hantera många förfrågningar samtidigt, särskilt I/O-bundna uppgifter.

Det innebär att Ert API kan fortsätta vara responsivt även när det väntar på externa resurser, till exempel databaser eller andra API:er.

Synkrona kontra asynkrona endpoints

I FastAPI kan Ni definiera två huvudtyper av endpoint-funktioner:

  • Synkrona (def): Dessa funktioner blockerar event loop medan de körs. Om en förfrågan tar lång tid kan andra behöva vänta.
  • Asynkrona (async def): Dessa funktioner kan 'pausas' och låta andra uppgifter köras medan de väntar på en operation, till exempel läsning från en databas, vilket gör Ert API icke-blockerande.

En enkel synkron endpoint

Här är en vanlig synkron endpoint. Även om den är enkel skulle time.sleep(), om det vore ett riktigt långsamt databasanrop, blockera andra förfrågningar tills körningen är klar.

Prova att köra den och observera fördröjningen om Ni snabbt försöker skicka flera förfrågningar.

from fastapi import FastAPI
import uvicorn
import time

app = FastAPI()

@app.get("/sync_hello")
def sync_hello():
    time.sleep(2) # Simulate a blocking I/O operation
    return {"message": "Hello from sync endpoint!"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

Definiera asynkrona endpoints

För att göra Er endpoint icke-blockerande använder Ni async def. Det talar om för FastAPI (och Python) att funktionen kan pausas och återupptas.

I en async def-funktion använder Ni nyckelordet await för att vänta på att andra asynkrona operationer ska slutföras utan att blockera hela applikationen.

Er första asynkrona endpoint

Det här exemplet använder asyncio.sleep(), som är en asynkron sleep-funktion. Lägg märke till nyckelordet await framför den.

Det gör att FastAPI kan hantera andra förfrågningar medan den här 'sover', vilket gör servern mer responsiv.

from fastapi import FastAPI
import uvicorn
import asyncio

app = FastAPI()

@app.get("/async_hello")
async def async_hello():
    await asyncio.sleep(2) # Simulate non-blocking I/O
    return {"message": "Hello from async endpoint!"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

När ska Ni välja asynkront?

async def är särskilt användbart för I/O-bundna operationer. Det är uppgifter som till största delen ägnar sin tid åt att vänta på att något annat ska hända, till exempel:

  • Skicka förfrågningar till externa API:er, till exempel httpx.
  • Fråga en databas, till exempel asyncpg eller SQLModel.
  • Läsa och skriva filer på disk.
  • Nätverkskommunikation.

För CPU-bundna uppgifter (omfattande beräkningar) snabbar async def inte upp själva uppgiften, men det kan hjälpa servern att fortsätta vara responsiv.

Arbeta med asynkrona bibliotek

När Er FastAPI-async def-endpoint behöver kommunicera med ett annat asynkront bibliotek, till exempel en asynkron HTTP-klient eller en asynkron databasedrivrutin, måste Ni använda await.

Om Ni inte använder await returneras awaitable-objektet direkt i stället för det färdiga resultatet, vilket vanligtvis inte är vad Ni vill!

Konceptuellt asynkront API-anrop

Föreställ Er att Ni hämtar data från en annan tjänst. Med en asynkron HTTP-klient kan detta göras utan blockering. Så här ser det ut i princip i en async def-endpoint:

Vi simulerar nätverksfördröjning med asyncio.sleep för att visa den icke-blockerande egenskapen.

from fastapi import FastAPI
import uvicorn
import asyncio

app = FastAPI()

@app.get("/fetch_data")
async def fetch_external_data():
    # In a real app, you'd use an async HTTP client like 'httpx'
    # async with httpx.AsyncClient() as client:
    #     response = await client.get("https://api.example.com/data")
    #     data = response.json()

    await asyncio.sleep(1) # Simulate network latency
    return {"data": "Fetched async data!"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

Uvicorn: den asynkrona motorn

FastAPI förlitar sig på en ASGI-server som Uvicorn. Uvicorn är det som faktiskt kör Era async def-funktioner effektivt.

  • Den hanterar Pythons event loop, som samordnar när olika asynkrona uppgifter får köras.
  • När await påträffas kan Uvicorn växla till en annan uppgift som är redo, vilket gör Ert API mycket samtidigt.

Det är denna 'kontextväxling' som gör att FastAPI kan hantera många förfrågningar utan att behöva vänta på att var och en ska slutföras helt.

Snabbkontroll: användning av async

Ni bygger en FastAPI-endpoint som behöver hämta data från ett långsamt externt API, vilket är en I/O-bunden uppgift. Vilket av följande är det bästa sättet att definiera denna endpoint för att säkerställa att Er FastAPI-applikation förblir responsiv?

Sammanfattning: asynkrona FastAPI

Vi har gått igenom hur FastAPI använder Pythons asynkrona funktioner:

  • Använd async def för endpoint-funktioner som utför I/O-bundna operationer.
  • Använd await när Ni anropar andra asynkrona funktioner eller bibliotek i en async def.
  • Detta icke-blockerande tillvägagångssätt, som drivs av Uvicorn och event loop, gör att Er FastAPI-applikation kan hantera många samtidiga förfrågningar effektivt, vilket leder till mycket responsiva API:er.

Härnäst ska vi titta på hur Ni kan lägga långvariga eller CPU-bundna uppgifter i bakgrundsprocesser!

Gratis att börja

Lär dig Bootcamp i backendutveckling med FastAPI med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
21
Lektioner
84

Vanliga frågor

Är lektionen ”FastAPI och asynkrona operationer” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Bootcamp i backendutveckling med FastAPI, inklusive ”FastAPI och asynkrona operationer”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Bootcamp i backendutveckling med FastAPI innehåller totalt 4 lektioner.

Vad lär jag mig i ”FastAPI och asynkrona operationer”?

Förstå hur FastAPI hanterar asynkrona funktioner på ett naturligt sätt och hur ni skriver effektiv, icke-blockerande kod. Ni övar på Bootcamp i backendutveckling med FastAPI med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Bootcamp i backendutveckling med FastAPI?

Du behöver inga förkunskaper. Utbildningen i Bootcamp i backendutveckling med FastAPI på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”FastAPI och asynkrona operationer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Bootcamp i backendutveckling med FastAPI-lektionen?

Ja. Varje Bootcamp i backendutveckling med FastAPI-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Repetition av Async/Await i Python
  2. FastAPI och asynkrona operationer
  3. Köra bakgrundsuppgifter
  4. WebSockets för realtidskommunikation
← Tillbaka till Bootcamp i backendutveckling med FastAPI