Django и Каналы и проблема ASGI Thread
У меня проблема с использованием django и каналов (в режиме asgi), когда я устанавливаю каналы django и использую режим asgi, мое приложение создает новый поток для каждого http-запроса и каждого сообщения, которое я отправляю с канала
например, предположим, что мое приложение представляет собой простой сервер чата эха, когда я запускаю свой сервер и запрашиваю соединение с сокетом как клиент, потоки увеличиваются, а также когда я отправляю что-то в сокет снова, поток увеличивается с каждым сообщением.
Ты знаешь почему? Как я могу это исправить или ограничить?
0 ответов
Для синхронных запросов Channels делает ThreadPool. Если он запускает HTTP-запросы в цикле событий, каждый запрос к базе данных и попадание в кэш блокируют цикл событий.
Если вы не установите переменную среды ASGI_THREADS
он использует значение по умолчанию, установленное concurrent.futures.ThreadPool
значение IMO слишком велико, так как это число ядер ЦП, умноженное на 5. Установите для ASGI_THREADS меньшее значение и используйте несколько процессов Дафни. Используя меньшее количество потоков и несколько процессов, вы избежите некоторого замедления, вызванного глобальной блокировкой интерпретатора Python.