Source code for crabnet.utils.get_core_count

import os
import re
import subprocess

import warnings


# %%
[docs]def get_core_count(): """Get the number of available virtual or physical CPUs on this system""" # cpuset # cpuset may restrict the number of *available* processors try: m = re.search(r"(?m)^Cpus_allowed:\s*(.*)$", open("/proc/self/status").read()) if m: res = bin(int(m.group(1).replace(",", ""), 16)).count("1") if res > 0: return res except IOError: pass # Python 2.6+ try: import multiprocessing return multiprocessing.cpu_count() except (ImportError, NotImplementedError): pass # https://github.com/giampaolo/psutil try: import psutil return psutil.cpu_count() # psutil.NUM_CPUS on old versions except (ImportError, AttributeError): pass # POSIX try: res = int(os.sysconf("SC_NPROCESSORS_ONLN")) if res > 0: return res except (AttributeError, ValueError): pass # Windows try: res = int(os.environ["NUMBER_OF_PROCESSORS"]) if res > 0: return res except (KeyError, ValueError): pass # jython try: from java.lang import Runtime runtime = Runtime.getRuntime() res = runtime.availableProcessors() if res > 0: return res except ImportError: pass # BSD try: sysctl = subprocess.Popen(["sysctl", "-n", "hw.ncpu"], stdout=subprocess.PIPE) scStdout = sysctl.communicate()[0] res = int(scStdout) if res > 0: return res except (OSError, ValueError): pass # Linux try: res = open("/proc/cpuinfo").read().count("processor\t:") if res > 0: return res except IOError: pass # Solaris try: pseudoDevices = os.listdir("/devices/pseudo/") res = 0 for pd in pseudoDevices: if re.match(r"^cpuid@[0-9]+$", pd): res += 1 if res > 0: return res except OSError: pass # Other UNIXes (heuristic) try: try: dmesg = open("/var/run/dmesg.boot").read() except IOError: dmesgProcess = subprocess.Popen(["dmesg"], stdout=subprocess.PIPE) dmesg = dmesgProcess.communicate()[0] res = 0 while "\ncpu" + str(res) + ":" in dmesg: res += 1 if res > 0: return res except OSError: pass warnings.warn("Can not determine number of CPUs on this system", RuntimeWarning)