Начиная с версии 3 Django, появилась возможность использовать асинхронный режим при работе с ядром.
На протяжении многих лет WSGI (Web Server Gateway Interface, интерфейс шлюза веб-сервера) служил простым универсальным сопряжением между приложениями Python и веб-серверами. По своему устройству серверы WSGI являются синхронными. Сервер блокирует каждый запрос до тех пор, пока не будет завершена операция ввода-вывода. То есть решение «проблемы 10 тысяч соединений» может оказаться непростой задачей!
Django – очень мощный инструмент для создания систем любого типа в очень короткие сроки. К сожалению, его синхронный характер накладывает ограничения на использование некоторых современных веб-технологий, таких как WebSockets или функции HTTP/2.
Здесь нам на помощь приходит ASGI (Asynchronous Standard Gateway Interface, стандартный асинхронный интерфейс шлюза). Фактически, ASGI является надмножеством WSGI и может вызывать доступные к вызову объекты WSGI. ASGI поддерживает вебсокеты и долговременные HTTP-соединения. Его также можно использовать для продолжительного HTTP-опроса и для событий HTTP SSE (Server-Sent Events), позволяющих выполнять однонаправленные обновления от сервера к клиенту.
Чтобы сделать возможным использование Django совместно с WebSockets, создали «Channels 2», представляющие собой новый уровень обработки с использованием вебсокетов и фоновых задач. Однако данное средство не входит в ядро Django. Для его использования необходимо выполнить дополнительную установку и настройку. Вот почему встроенная поддержка асинхронных функций решает проблему интеграции с вебсокетом.
Переход на асинхронный режим занимает некоторое время. Сообщается, что текущий выпуск (3.0) изначально поддерживает ASGI, а также некоторые функции безопасности асинхронного программирования. Поскольку задача большая, требуется повторная реализация многих компонентов (таких как ORM, обработчик запросов, средство визуализации шаблонов и т.д.) для их работы в асинхронном режиме, который, как ожидается, появится в следующих выпусках. Как только это будет сделано, в мире появится ещё более мощный и надёжный асинхронный веб-фреймворк, который продолжит предоставлять все преимущества быстрых и надёжных систем любого типа.