| | import os |
| | import re |
| | import subprocess |
| |
|
| |
|
| | __all__ = ['available_cpu_count'] |
| |
|
| |
|
| | def available_cpu_count(): |
| | """ Number of available virtual or physical CPUs on this system, i.e. |
| | user/real as output by time(1) when called with an optimally scaling |
| | userspace-only program""" |
| |
|
| | |
| | |
| | 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 |
| |
|
| | |
| | try: |
| | import multiprocessing |
| | return multiprocessing.cpu_count() |
| | except (ImportError, NotImplementedError): |
| | pass |
| |
|
| | |
| | try: |
| | import psutil |
| | return psutil.cpu_count() |
| | except (ImportError, AttributeError): |
| | pass |
| |
|
| | |
| | try: |
| | res = int(os.sysconf('SC_NPROCESSORS_ONLN')) |
| |
|
| | if res > 0: |
| | return res |
| | except (AttributeError, ValueError): |
| | pass |
| |
|
| | |
| | try: |
| | res = int(os.environ['NUMBER_OF_PROCESSORS']) |
| |
|
| | if res > 0: |
| | return res |
| | except (KeyError, ValueError): |
| | pass |
| |
|
| | |
| | try: |
| | from java.lang import Runtime |
| | runtime = Runtime.getRuntime() |
| | res = runtime.availableProcessors() |
| | if res > 0: |
| | return res |
| | except ImportError: |
| | pass |
| |
|
| | |
| | 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 |
| |
|
| | |
| | try: |
| | res = open('/proc/cpuinfo').read().count('processor\t:') |
| |
|
| | if res > 0: |
| | return res |
| | except IOError: |
| | pass |
| |
|
| | |
| | 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 |
| |
|
| | |
| | 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 |
| |
|
| | raise Exception('Can not determine number of CPUs on this system') |
| |
|