Веб-сервер ASGI для Python.
Документация : https://www.uvicorn.org.
Uvicorn — это реализация веб-сервера ASGI для Python.
До недавнего времени в Python не было минимального низкоуровневого интерфейса сервера/приложения для асинхронных фреймворков. Спецификация ASGI заполняет этот пробел и означает, что теперь мы можем начать создавать общий набор инструментов, который можно использовать во всех асинхронных платформах.
Uvicorn поддерживает HTTP/1.1 и WebSockets.
Установите с помощью pip
:
$ pip install uvicorn
Это установит uvicorn с минимальными (чистыми Python) зависимостями.
$ pip install ' uvicorn[standard] '
Это установит uvicorn с зависимостями на основе Cython (где это возможно) и другими «дополнительными дополнениями».
В этом контексте «на основе Cython» означает следующее:
uvloop
будет установлен и использован, если это возможно.httptools
если это возможно.Более того, «дополнительные опции» означают, что:
websockets
(если вы хотите использовать wsproto
вам придется установить его вручную), если это возможно.--reload
в режиме разработки будет использовать watchfiles
.colorama
для цветных журналов.python-dotenv
будет установлен, если вы захотите использовать опцию --env-file
.PyYAML
будет установлен, чтобы вы могли при желании предоставить файл .yaml
для --log-config
. Создайте приложение в 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!' ,
})
Запустите сервер:
$ uvicorn example:app
Большинство хорошо зарекомендовавших себя веб-фреймворков Python начинались как фреймворки на основе WSGI.
Приложения WSGI представляют собой единый синхронный вызываемый объект, который принимает запрос и возвращает ответ. Это не позволяет создавать долгоживущие соединения, как в случае с соединениями HTTP или WebSocket с длительным опросом, которые WSGI плохо поддерживает.
Наличие модели асинхронного параллелизма также позволяет использовать такие параметры, как облегченные фоновые задачи, и может быть меньшим ограничивающим фактором для конечных точек, которые имеют длительные периоды блокировки сетевого ввода-вывода, например, при обработке медленных HTTP-запросов.
Сильная сторона протокола ASGI заключается в том, что он отделяет реализацию сервера от среды приложения. Это позволяет создать экосистему взаимодействующих веб-серверов и платформ приложений.
Первой реализацией сервера ASGI, первоначально разработанной для поддержки каналов Django, является веб-сервер Daphne.
Он широко используется в производстве и поддерживает HTTP/1.1, HTTP/2 и WebSockets.
Любое из приведенных здесь примеров приложений можно с таким же успехом запустить с использованием daphne
.
$ pip install daphne
$ daphne app:App
Изначально Hypercorn был частью веб-инфраструктуры Quart, а затем был выделен в автономный сервер ASGI.
Hypercorn поддерживает HTTP/1.1, HTTP/2 и WebSockets.
Он также поддерживает превосходную асинхронную структуру trio
в качестве альтернативы asyncio
.
$ pip install hypercorn
$ hypercorn app:App
Mangum — это адаптер для использования приложений ASGI с AWS Lambda и API Gateway.
Granian — это ASGI-совместимый HTTP-сервер Rust, который поддерживает HTTP/2, TLS и WebSockets.
Uvicorn — это лицензионный код BSD.
Разработано и изготовлено с осторожностью.
— ? —