Django и Каналы и проблема ASGI Thread

У меня проблема с использованием django и каналов (в режиме asgi), когда я устанавливаю каналы django и использую режим asgi, мое приложение создает новый поток для каждого http-запроса и каждого сообщения, которое я отправляю с канала

например, предположим, что мое приложение представляет собой простой сервер чата эха, когда я запускаю свой сервер и запрашиваю соединение с сокетом как клиент, потоки увеличиваются, а также когда я отправляю что-то в сокет снова, поток увеличивается с каждым сообщением.

Ты знаешь почему? Как я могу это исправить или ограничить?

0 ответов

Для синхронных запросов Channels делает ThreadPool. Если он запускает HTTP-запросы в цикле событий, каждый запрос к базе данных и попадание в кэш блокируют цикл событий.

Если вы не установите переменную среды ASGI_THREADS он использует значение по умолчанию, установленное concurrent.futures.ThreadPool значение IMO слишком велико, так как это число ядер ЦП, умноженное на 5. Установите для ASGI_THREADS меньшее значение и используйте несколько процессов Дафни. Используя меньшее количество потоков и несколько процессов, вы избежите некоторого замедления, вызванного глобальной блокировкой интерпретатора Python.

Другие вопросы по тегам