Джанго и Каналы и проблема потока ASGI - PullRequest
0 голосов
/ 31 августа 2018

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

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

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

1 Ответ

0 голосов
/ 14 декабря 2018

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

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

...