Spaces:
Running
on
Zero
Running
on
Zero
| import math | |
| import os | |
| import sys | |
| try: | |
| import psutil | |
| except ImportError: | |
| psutil = None # type: ignore | |
| __all__ = ("cpu_count", "CPU_COUNT") | |
| def cpu_count(): | |
| """Get the available CPU count for this system. | |
| Takes the minimum value from the following locations: | |
| - Total system cpus available on the host. | |
| - CPU Affinity (if set) | |
| - Cgroups limit (if set) | |
| """ | |
| count = os.cpu_count() | |
| # Check CPU affinity if available | |
| if psutil is not None: | |
| try: | |
| affinity_count = len(psutil.Process().cpu_affinity()) | |
| if affinity_count > 0: | |
| count = min(count, affinity_count) | |
| except Exception: | |
| pass | |
| # Check cgroups if available | |
| if sys.platform == "linux": | |
| # The directory name isn't standardized across linux distros, check both | |
| for dirname in ["cpuacct,cpu", "cpu,cpuacct"]: | |
| try: | |
| with open("/sys/fs/cgroup/%s/cpu.cfs_quota_us" % dirname) as f: | |
| quota = int(f.read()) | |
| with open("/sys/fs/cgroup/%s/cpu.cfs_period_us" % dirname) as f: | |
| period = int(f.read()) | |
| # We round up on fractional CPUs | |
| cgroups_count = math.ceil(quota / period) | |
| if cgroups_count > 0: | |
| count = min(count, cgroups_count) | |
| break | |
| except Exception: | |
| pass | |
| return count | |
| CPU_COUNT = cpu_count() | |