
Введение
В прошлом году Эндрю Годвин, сотрудник Django , разработал план действий по внедрению асинхронных функций в Django . После долгих обсуждений и поправок Технический совет Django вчера одобрил его DEP 0009: Asjc-совместимый Django.
Годвин написал в группе Google:
«После долгого и сложного голосования я могу объявить, что Технический совет проголосовал за DEP 0009 (Async Django), и поэтому DEP был переведен в «принятое состояние».
Причина, по которой Годвин считает, что сейчас самое подходящее время для поддержки асинхронной поддержки в Django, заключается в том, что, начиная с версии 2.1, он поддерживает Python 3.5 и выше. Эти версии Python имеют async def и похожую встроенную поддержку сопрограмм. Кроме того, в настоящее время сеть постепенно переходит на использование сценариев, которые предпочитают высокие параллельные рабочие нагрузки и большие распараллеливаемые запросы.
Мотивация Async в Джанго
Предложение Django Enhancement (DEP) 0009 направлено на устранение одного из основных недостатков Python: неэффективного многопоточности. Python не считается идеальным асинхронным языком. Его библиотека asyncio для написания параллельного кода имеет некоторые недостатки в дизайне ядра. Существуют альтернативные асинхронные платформы для Python, но они несовместимы.
Каналы Django предоставили некоторую асинхронную поддержку Django, но они в основном сосредоточены на обработке WebSocket. Объясняя мотивацию, DEP говорит: « В то же время важно, чтобы у нас был план, обеспечивающий немедленную выгоду для наших пользователей, вместо того, чтобы пытаться написать совершенно новую инфраструктуру размера Django, изначально изначально асинхронную».
Кроме того, большинство разработчиков не знакомы с разработкой приложений Python, которые имеют асинхронную поддержку. Также не хватает надлежащей документации, учебных пособий и инструментов, чтобы помочь им. Годвин считает, что Django может стать «хорошим катализатором», помогающим создавать руководящие документы.
Цели этого плана DEP для достижения
DEP предлагает привнести поддержку асинхронного Python в Django, поддерживая синхронную поддержку Python, а также обратно-совместимым способом.
Вот его конечные цели, которые Годвин перечислил в своей дорожной карте:
- Создание блокирующих частей в Django, таких как сеансы, аутентификация, ORM и обработчики, асинхронными изначально с синхронной оболочкой, отображаемой сверху, где это необходимо для обеспечения обратной совместимости.
- Сохранение привычных макетов / представлений / шаблонов / промежуточного программного обеспечения без изменений с минимальными изменениями.
- Обеспечение того, чтобы эти обновления не ставили под угрозу скорость и приводили к значительному снижению производительности на любом этапе этого плана.
- Предоставление разработчикам возможности создавать полностью асинхронные веб-сайты, если они этого хотят, но не применять это в качестве стандартного способа создания веб-сайтов. Приветствие нового таланта в команду Djang, чтобы помочь на крупномасштабных функций.
Сроки достижения этих целей
Годвин в своей «Дорожной карте A Django Async» поделился следующей шкалой времени: Джанго версия Обновления
2.1 Текущая текущая версия. Нет асинхронной работы.
2.2 Начальная работа по добавлению асинхронного ORM и возможности просмотра, но по умолчанию все синхронизируется по умолчанию, а асинхронная поддержка в основном основана на пуле потоков.
3.0 Переписать внутренний стек обработки запросов, чтобы он был полностью асинхронным, добавить асинхронное промежуточное ПО, формы, кеширование, сеансы, аутентификацию. Запустите процесс устаревания для любых API, которые становятся только асинхронными.
3.1 Продолжать улучшать асинхронную поддержку, возможные асинхронные шаблонные изменения
3.2 Завершите процесс амортизации и получите в основном асинхронный Django.
Годвин опубликовал резюме обсуждения, которое он имел с Техническим советом Django в Группе Google. Некоторые из вопросов, которые они задавали, были о том, как команда планирует отличить асинхронные версии функций / методов от синхронизирующих, как эта реализация будет гарантировать, что не будет никакого снижения производительности, если пользователь отключится от асинхронного режима, и многое другое.
В дополнение к этим техническим запросам Правление также подняло нетехническую проблему: « Проект Django потерял многих участников за многие годы, в основном он находится в режиме обслуживания, и у нас, вероятно, нет людей, которые бы укомплектовали такой проект».
Годвин видит огромную возможность скрыться в этом фундаментальном вызове, а именно - возродить проект Джанго.
Он добавляет:
«Я согласен с наблюдением, что все существенно замедлилось, но я лично считаю, что такой проект, как асинхронный, - это именно то, что нужно Джанго для возобновления работы. Теперь есть много плодородной почвы, чтобы изменить и обновить вещи, которые не просто исправляют пятилетние ошибки ».
Прочтите DEP 0009: Django с поддержкой асинхронного режима, чтобы узнать больше.