Detecting cpus/cores in Python
I found this interesting function in a post on Twister and distributed programming by Bruce Eckel. It uses the Python os package to detect the number of CPUs/cores on a machine. Archiving it here for future reference
def detectCPUs():
"""
Detects the number of CPUs on a system. Cribbed from pp.
"""
# Linux, Unix and MacOS:
if hasattr(os, "sysconf"):
if os.sysconf_names.has_key("SC_NPROCESSORS_ONLN"):
# Linux & Unix:
ncpus = os.sysconf("SC_NPROCESSORS_ONLN")
if isinstance(ncpus, int) and ncpus > 0:
return ncpus
else: # OSX:
return int(os.popen2("sysctl -n hw.ncpu")[1].read())
# Windows:
if os.environ.has_key("NUMBER_OF_PROCESSORS"):
ncpus = int(os.environ["NUMBER_OF_PROCESSORS"]);
if ncpus > 0:
return ncpus
return 1 # Default
6 comments:
If you are using the multiprocessing module, do this instead:
multiprocessing.cpu_count()
Thanks Felix. I happened to be using python 2.5 when posting this. multiprocessing seems to have been introduced from 2.6 onwards.
Multiprocessing has been backported to 2.4/2.5, see
http://pypi.python.org/pypi/multiprocessing/
The processing module also seems to provide this:
import processing
processing.cpuCount()
@anonymous : thanks !
@ben : Is processing part of the standard library ? unless i am mistaken this needs to be downloaded from pypi ?
For python 2.6 it is
import multiprocessing
multiprocessing.cpu_count()
Post a Comment