We usually use the below Python code to get CPU cores:
from multiprocessing import cpu_count print("CPU cores:", cpu_count())
But when the snippet running inside a docker container, it will just return the number of CPU cores for the physical machine the container runs on, not the actually --cpus
(for docker) or CPU limit (for Kubernetes).
Then, how could we get the CPU cores set by docker argument or Kubernetes configuration for this container?
The only answer I could find is here. And the corresponding Python code written by me is:
def get_cpu_limit(): with open("/sys/fs/cgroup/cpu/cpu.cfs_quota_us") as fp: cfs_quota_us = int(fp.read()) with open("/sys/fs/cgroup/cpu/cpu.cfs_period_us") as fp: cfs_period_us = int(fp.read()) container_cpus = cfs_quota_us // cfs_period_us # For physical machine, the `cfs_quota_us` could be '-1' cpus = cpu_count() if container_cpus < 1 else container_cpus return cpus