Zum Inhalt

Lifespan

Starlette-Anwendungen können einen Lifecycle-Handler registrieren, der den Code verarbeitet, der vor dem Start der Anwendung oder beim Herunterfahren der Anwendung ausgeführt werden muss.

Import von Kontext

von starlette. applications import Starlette


@ contextlib. asynccontextmanager für
async def lifespan (Deutsch):
    async mit some_async_resource ():
        Der Aufruf ("Run at startup!")
        und yield
        print ("Auf den Shutdown!")


Die Bahn […]
    ...
]

Starlette (Routen = Routen, Lifespan = Lebenswege)

Starlette beginnt erst mit der Verarbeitung eingehender Anforderungen, bevor der Lebenszyklus ausgeführt wird.

Sobald alle Verbindungen geschlossen sind und alle laufenden Hintergrundaufgaben abgeschlossen sind, wird der Lifecycle Teardown ausgeführt.

Erwägen Sie die Verwendung von anyio.create_task_group(), um asynchrone Aufgaben zu verwalten.

Lebens-Zustand

Life hat das Konzept von state, einem Wörterbuch, das verwendet werden kann, um Objekte zwischen Lebensdauer und Anforderungen zu teilen.

Import von Kontextlib
from typing import AsyncIterator, TypedDict (englisch)

Import von HTTPX
von starlette. applications import Starlette
from starlette. requests import Request (Eingabeaufforderung)
from starlette. responses import plainTextResponse (englisch)
von starlette. routing import Route


Klassenzustand (TypedDict):
    http_client: httpx. asyncClient ist


@contextlib . asynccontextmanager für context
async def lifespan (app : Starlette) - > AsyncIterator [ Zustand ] :
    async mit httpx . AsyncClient () als client :
        und yield {"http_client": client}


async def homepage (Anforderung : Anfrage) - > PlainTextResponse :
    client = request . state . http _ client (auf Englisch)
    Antwort = await-client . get (" ist einhttps://www.example.com")
    return PlainTextResponse (Antwort . text)


Die Startelf (
    Lebenszeichen = Lifespan ,
    Route = [ Route ("/" , Webseite) ]
)

state, das auf der Anfrage empfangen wurde , ist eine flache Kopie des Status , der auf einem Lifetime-Handler empfangen wurde .

Die Lebensdauer im Test .

Sie sollten TestClient als Kontextmanager verwenden , um die Lebensdauer der Aufrufe zu gewährleisten .

from beispiel import App
von starlette . testclient import TestClient


def test _ homepage () : Die Webseite :
    mit TestClient (app) als Client :
        # Die Lebensdauer der Anwendung wird auf den Block gestellt .
        Antwort = client . get ("/" oder ")
        assert response . status _ code = 200 Zeichen

    # Und die Lifespan 's Teardown läuft , wenn der Block ausgeführt wird .