Server web ASGI, untuk Python.
Dokumentasi : https://www.uvicorn.org
Uvicorn adalah implementasi server web ASGI untuk Python.
Sampai saat ini Python tidak memiliki antarmuka server/aplikasi tingkat rendah minimal untuk kerangka kerja asinkron. Spesifikasi ASGI mengisi kesenjangan ini, dan berarti kami sekarang dapat mulai membangun seperangkat alat umum yang dapat digunakan di semua kerangka kerja asinkron.
Uvicorn mendukung HTTP/1.1 dan WebSockets.
Instal menggunakan pip
:
$ pip install uvicorn
Ini akan menginstal uvicorn dengan dependensi minimal (Python murni).
$ pip install ' uvicorn[standard] '
Ini akan menginstal uvicorn dengan dependensi "berbasis Cython" (jika memungkinkan) dan "ekstra opsional" lainnya.
Dalam konteks ini, "berbasis Cython" berarti sebagai berikut:
uvloop
akan dipasang dan digunakan jika memungkinkan.httptools
jika memungkinkan.Selain itu, "ekstra opsional" berarti:
websockets
(jika Anda ingin menggunakan wsproto
Anda harus menginstalnya secara manual) jika memungkinkan.--reload
dalam mode pengembangan akan menggunakan watchfiles
.colorama
untuk log berwarna.python-dotenv
akan diinstal jika Anda ingin menggunakan opsi --env-file
.PyYAML
akan diinstal agar Anda dapat menyediakan file .yaml
ke --log-config
, jika diinginkan. Buat aplikasi, di 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!' ,
})
Jalankan servernya:
$ uvicorn example:app
Kerangka kerja Web Python yang paling mapan dimulai sebagai kerangka kerja berbasis WSGI.
Aplikasi WSGI adalah aplikasi panggilan sinkron tunggal yang menerima permintaan dan mengembalikan respons. Hal ini tidak memungkinkan koneksi berumur panjang, seperti yang Anda dapatkan dengan koneksi HTTP atau WebSocket jajak pendapat panjang, yang tidak didukung dengan baik oleh WSGI.
Memiliki model konkurensi asinkron juga memungkinkan opsi seperti tugas latar belakang yang ringan, dan tidak terlalu menjadi faktor pembatas untuk titik akhir yang diblokir dalam jangka waktu lama di I/O jaringan seperti menangani permintaan HTTP yang lambat.
Kekuatan protokol ASGI adalah memisahkan implementasi server dari kerangka aplikasi. Hal ini memungkinkan adanya ekosistem server web dan kerangka aplikasi yang saling beroperasi.
Implementasi server ASGI pertama, awalnya dikembangkan untuk mendukung Django Channels, adalah server web Daphne.
Ini dijalankan secara luas dalam produksi, dan mendukung HTTP/1.1, HTTP/2, dan WebSockets.
Contoh aplikasi apa pun yang diberikan di sini juga dapat dijalankan menggunakan daphne
.
$ pip install daphne
$ daphne app:App
Hypercorn awalnya merupakan bagian dari kerangka web Quart, sebelum dipisahkan menjadi server ASGI yang berdiri sendiri.
Hypercorn mendukung HTTP/1.1, HTTP/2, dan WebSockets.
Ini juga mendukung kerangka kerja trio
async yang luar biasa, sebagai alternatif dari asyncio
.
$ pip install hypercorn
$ hypercorn app:App
Mangum adalah adaptor untuk menggunakan aplikasi ASGI dengan AWS Lambda & API Gateway.
Granian adalah server HTTP Rust yang kompatibel dengan ASGI yang mendukung HTTP/2, TLS, dan WebSockets.
Uvicorn adalah kode berlisensi BSD.
Dirancang & dibuat dengan hati-hati.
— ? —