Почему os.cpu_count() внутри Docker-контейнера в Kubernetes возвращает количество ядер всего физического сервера и как это ломает пулы потоков?

os.cpu_count() сообщает число логических CPU системы, которое может не учитывать CPU quota контейнера. Если по нему создать большой пул, workers будут конкурировать за небольшую квоту и попадать под throttling.

Короткий ответ

Что ответить на собеседовании

os.cpu_count() сообщает число логических CPU системы, которое может не учитывать CPU quota контейнера. Если по нему создать большой пул, workers будут конкурировать за небольшую квоту и попадать под throttling.

Подробный разбор

Ответ с пояснениями

os.cpu_count() сообщает число логических CPU системы, которое может не учитывать CPU quota контейнера. Если по нему создать большой пул, workers будут конкурировать за небольшую квоту и попадать под throttling.

Различайте ограничения affinity/cpuset и квоту процессорного времени cgroups: это не одно и то же. Даже process_cpu_count(), учитывающий доступные процессу CPU, не следует считать универсальным измерителем дробной квоты. Размер пула лучше задавать явно с учётом requests/limits, типа работы и измерений задержек. Избыточные workers увеличивают переключения, память и нагрузку на зависимости вместо ожидаемого ускорения.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее