Python 获得 CPU 核数的方法
准确来说,获得的不是核心(Core)数,而是并发的线程数。在 multiprocessing 模块中的 cpu_count 函数已经实现了该功能,函数的源码如下:
def cpu_count(): ''' Returns the number of CPUs in the system ''' if sys.platform == 'win32': try: num = int(os.environ['NUMBER_OF_PROCESSORS']) except (ValueError, KeyError): num = 0 elif 'bsd' in sys.platform or sys.platform == 'darwin': comm = '/sbin/sysctl -n hw.ncpu' if sys.platform == 'darwin': comm = '/usr' + comm try: with os.popen(comm) as p: num = int(p.read()) except ValueError: num = 0 else: try: num = os.sysconf('SC_NPROCESSORS_ONLN') except (ValueError, OSError, AttributeError): num = 0 if num >= 1: return num else: raise NotImplementedError('cannot determine number of cpus')
如果是 Windows 环境,则从环境变量 NUMBER_OF_PROCESSORS 中得到CPU线程数量;如果是 BSD 或者 Mac OS,则是执行 sysctl -n hw.ncpu(注意 Mac OS 的是在 /usr/sbin/sysctl -n hw.ncpu 中);如果是其他系统(一般就剩下 Linux 了),则执行 os.sysconf('SC_NPROCESSORS_ONLN') 得到。