Web Analytics Made Easy - StatCounter
Главная Блог Django 3.0 работает асинхронно

Django 3.0 работает асинхронно

Django 3.0 работает асинхронно

Введение

В прошлом году Эндрю Годвин, сотрудник 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 с поддержкой асинхронного режима, чтобы узнать больше.

источник

иллюстрация