Ein ASGI-Webserver für Python.
Dokumentation : https://www.uvicorn.org
Uvicorn ist eine ASGI-Webserver-Implementierung für Python.
Bis vor Kurzem fehlte in Python eine minimale Low-Level-Server-/Anwendungsschnittstelle für asynchrone Frameworks. Die ASGI-Spezifikation füllt diese Lücke und bedeutet, dass wir jetzt mit der Entwicklung eines gemeinsamen Werkzeugsatzes beginnen können, der in allen asynchronen Frameworks verwendet werden kann.
Uvicorn unterstützt HTTP/1.1 und WebSockets.
Mit pip
installieren:
$ pip install uvicorn
Dadurch wird uvicorn mit minimalen (reinen Python-)Abhängigkeiten installiert.
$ pip install ' uvicorn[standard] '
Dadurch wird uvicorn mit „Cython-basierten“ Abhängigkeiten (sofern möglich) und anderen „optionalen Extras“ installiert.
In diesem Zusammenhang bedeutet „Cython-basiert“ Folgendes:
uvloop
wird nach Möglichkeit installiert und verwendet.httptools
verwaltet.Darüber hinaus bedeutet „optionale Extras“, dass:
websockets
verwaltet (wenn Sie wsproto
verwenden möchten, müssen Sie es manuell installieren).--reload
im Entwicklungsmodus verwendet watchfiles
.colorama
für die farbigen Protokolle installiert.python-dotenv
wird installiert, wenn Sie die Option --env-file
verwenden möchten.PyYAML
wird installiert, damit Sie bei Bedarf eine .yaml
Datei für --log-config
bereitstellen können. Erstellen Sie eine Anwendung in example.py
:
async def app ( scope , receive , send ):
assert scope [ 'type' ] == 'http'
await send ({
'type' : 'http.response.start' ,
'status' : 200 ,
'headers' : [
( b'content-type' , b'text/plain' ),
],
})
await send ({
'type' : 'http.response.body' ,
'body' : b'Hello, world!' ,
})
Führen Sie den Server aus:
$ uvicorn example:app
Die meisten etablierten Python-Web-Frameworks begannen als WSGI-basierte Frameworks.
WSGI-Anwendungen sind einzelne, synchron aufrufbare Anwendungen, die eine Anfrage entgegennehmen und eine Antwort zurückgeben. Dies ermöglicht keine langlebigen Verbindungen, wie sie bei HTTP- oder WebSocket-Verbindungen mit langer Abfragezeit auftreten, die WSGI nicht gut unterstützt.
Ein asynchrones Parallelitätsmodell ermöglicht auch Optionen wie einfache Hintergrundaufgaben und kann ein weniger einschränkender Faktor für Endpunkte sein, deren Netzwerk-E/A über lange Zeiträume hinweg blockiert ist, beispielsweise durch die Verarbeitung langsamer HTTP-Anfragen.
Eine Stärke des ASGI-Protokolls besteht darin, dass es die Serverimplementierung vom Anwendungsframework entkoppelt. Dies ermöglicht ein Ökosystem interoperierender Webserver und Anwendungsframeworks.
Die erste ASGI-Serverimplementierung, die ursprünglich für den Betrieb von Django-Kanälen entwickelt wurde, ist der Daphne-Webserver.
Es wird häufig in der Produktion eingesetzt und unterstützt HTTP/1.1, HTTP/2 und WebSockets.
Jede der hier aufgeführten Beispielanwendungen kann stattdessen auch mit daphne
ausgeführt werden.
$ pip install daphne
$ daphne app:App
Hypercorn war ursprünglich Teil des Quart-Webframeworks, bevor es in einen eigenständigen ASGI-Server aufgeteilt wurde.
Hypercorn unterstützt HTTP/1.1, HTTP/2 und WebSockets.
Es unterstützt auch das hervorragende trio
-Async-Framework als Alternative zu asyncio
.
$ pip install hypercorn
$ hypercorn app:App
Mangum ist ein Adapter für die Verwendung von ASGI-Anwendungen mit AWS Lambda und API Gateway.
Granian ist ein ASGI-kompatibler Rust-HTTP-Server, der HTTP/2, TLS und WebSockets unterstützt.
Uvicorn ist BSD-lizenzierter Code.
Mit Sorgfalt entworfen und gefertigt.
– ? —