Джанго является синхронным или асинхронным? - PullRequest
0 голосов
/ 24 октября 2019

Джанго является синхронным или асинхронным? Я хочу знать, что Django Framework является синхронным или асинхронным. Я слышал о проблемах интервью, которые они спрашивают о используемой вами платформе - синхронной или асинхронной. Поэтому я хочу узнать значение Синхронный и Асинхронный с точки зрения веб-разработки.

1 Ответ

5 голосов
/ 24 октября 2019

Сам Django является синхронным.

каждый HTTP-запрос будет обрабатываться полностью синхронно.

Однако у вас есть расширения, такие как django-channel (https://github.com/django/channels), которые являются асинхронными ипредназначены для веб-сокетов и т. д.

Это немного упрощено: но синхронное программирование - это если вы пишете код, который обрабатывает один HTTP-запрос от начала и до конца и выполняется в потоке или в процессе иесли один процесс / один поток обрабатывает только один запрос за раз.

С python, в частности с asyncio или с витой, можно написать код такой, что один процесс / поток может обрабатывать несколько запросов. Всякий раз, когда один запрос ожидает получения новых данных в сети или отправки части данных, он может обработать другой запрос, пока этот другой запрос не будет ожидать готовности сети.

Django не используетtwisted or asyncio.

Новые веб-приложения веб-серверов, однако, не только обрабатывают запросы HTTP, но также могут использовать веб-сокеты. Модуль каналов django предназначен для работы с веб-сокетами. Он реализован с помощью asyncio, который позволяет обрабатывать множество веб-сокетов только одним процессом. он будет взаимодействовать с синхронными частями django через сообщения (например, redis)

Добавление: как указал @Sayse, django 3.0 будет поддерживать асинхронный код. Однако: операции ORM все еще будут синхронными, только если я понимаю. Они потерпят неудачу в цикле асинхронных событий с исключением SynchronousOnlyOperation. Так что, вероятно, большинство реальных представлений django потерпит неудачу, так как одной из причин django является использование ORM для доступа к базе данных .sections

...