#django #python-asyncio #django-channels
#django #python-asyncio #django-каналы
Вопрос:
Читая о спецификации ASGI, я заметил это предложение в параграфе совместимости с WSGI:
Приложения WSGI, будучи синхронными, должны запускаться в пуле потоков для обслуживания, но в противном случае их время выполнения зависит от времени жизни области HTTP-соединения.
Я не понимаю, почему его нужно запускать в пуле потоков?
Ответ №1:
Я не понимаю, почему [приложение WSGI] должно запускаться в пуле потоков?
Приложение WSGI, запущенное на сервере ASGI, должно запускаться в отдельном потоке. Если бы он выполнялся в потоке цикла событий, одно приложение WSGI заблокировало бы весь цикл событий, включая все другие приложения ASGI, запущенные на сервере. Собственные приложения ASGI не имеют этой проблемы, потому что они асинхронны и, как таковые, предназначены для запуска внутри цикла событий наряду с другими сопрограммами и обратными вызовами.
Пул потоков — это просто оптимизация: он кэширует уже созданные потоки, так что вам не нужно создавать новый поток для каждого запроса. (Он также обеспечивает ограничение на максимальное количество потоков, выполняемых одновременно, и ставит в очередь дополнительные запросы.)