os.cpu_count() сообщает число логических CPU системы, которое может не учитывать CPU quota контейнера. Если по нему создать большой пул, workers будут конкурировать за небольшую квоту и попадать под throttling.
Почему os.cpu_count() внутри Docker-контейнера в Kubernetes возвращает количество ядер всего физического сервера и как это ломает пулы потоков?
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.