Как работает Python ASGI

В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.

1. Подготовка к запуску
2. Перезапуск после изменения кода сайта
3. Работа с ошибками приложения
4. Интерактивная документация

ASGI — это клиент-серверный протокол взаимодействия веб-сервера и приложения, дальнейшее развитие технологии WSGI. По сравнению с WSGI предоставляет стандарт как для асинхронных, так и для синхронных приложений. На услуге “Хостинг” в качестве ASGI-сервера используется hypercorn, который автоматически использует в своем конфигурационном файле значения переменных окружения APP_IP и APP_PORT, так как возможность запуска на произвольном ip-адресе и порту доступна только на виртуальных машинах.

1. Подготовка к запуску

В этой статье мы рассмотрим пример размещения простого приложения на FastAPI в контейнере услуги “Хостинг”. Для этого потребуется создать новый сайт, выбрав Python ASGI python_asgi.png

и выполнить следующие действия:

  • подключитесь по ssh и перейдите в каталог созданного сайта для активации виртуального окружения или запустите Терминал со вкладки “Файлы” web_terminal_ssh.png

  • произведите установку fastapi с помощью команды

pip install fastapi
  • удалите автоматически созданные файлы
rm www/index.html
rm app/index.html
rm app/asgi.py
  • создайте файл app/asgi.py с содержимым
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello, Sick, Sad World"}

fake_db_items = [{"item_name": "Daria"}, {"item_name": "Jane"}, {"item_name": "Quinn"}, {"item_name": "Trent"}, {"item_name": "Tom"}]

@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 5):
    return fake_db_items[skip : skip + limit]

В этом примере мы импортируем FastAPI и создаем экземпляр нашего приложения. Затем мы используем декоратор @app.get для определения двух маршрутов:

/ - этот маршрут возвращает простой словарь с сообщением «Hello, Sick, Sad World».

/items/ - этот код FastAPI определяет маршрут, который возвращает подмножество элементов из массива fake_db_items. Параметры skip и limit используются для указания диапазона элементов, которые необходимо вернуть. Функция read_item принимает эти параметры и возвращает массив элементов, начиная с указанного смещения (skip) и ограниченного указанным количеством (limit). В данном случае код возвращает элементы из массива fake_db_items, начиная с нулевого индекса и ограниченный пятью элементами. Например, если вы запросите маршрут /items/?skip=2&limit=3, функция read_item вернет элементы с индексами 2, 3 и 4 из массива fake_db_items. Этот код демонстрирует использование параметров маршрутов в FastAPI для динамического получения данных и их возврата в ответе.

2. Перезапуск после изменения кода сайта

Для перезапуска приложения в терминальном режиме в каталоге сайта выполните команду:

touch reload

Например

c56789@h0:~/имя_сайта$ touch reload

В качестве альтернативного вариант можно воспользоваться кнопкой Перезапустить Python ASGI на вкладке “Python ASGI” сайта в личном кабинете.

3. Работа с ошибками приложения

Если при обращении к сайту вы видите ошибку 502 Bad Gateway или иную, то в первую очередь стоит обратиться к журналу ошибок, которые Вы можете найти в файле имя_сайта/log/app-runlog/current.

Наблюдение в реальном времени за лог-файлом:

tail -f ~/имя_сайта/log/app-runlog/current

4. Интерактивная документация

Вы можете ознакомиться с автоматической интерактивной документацией, работающей на Swagger UI, обратившись в браузере по адресу

https://имя_сайта/docs
Хостинг
Хостинг
Хостинг
Создавайте неограниченное количество сайтов в изолированных контейнерах
С 2003 года
Надежность.
Нам доверяют десятки тысяч компаний и разработчиков
20 лет
Предоставляем услуги профессионального хостинга
35 000
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime
наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865