Porem no Python isso pode variar um pouco, aqui eu juntei vários casos de como determinar o número de cores (CPUs) em vários ambientes diferentes: (Windows, Linux, FreeBSD, Jython e outros)
Cada uma das funções abaixo serve tem uma forma diferente de determinar o número de CPUs, é só escolher a que mais se adéqua ao seu ambiente.
def get_cores_python():
u"\nRetorna o número de cpu usnado python 2.6+\n"
import multiprocessing
return multiprocessing.cpu_count()
#-----------
def get_cores_posix():
u"\nRetorna o número de cpu usnado POSIX(Interface Portável entre Sistemas Operacionais)\n"
import os
res = int(os.sysconf('SC_NPROCESSORS_ONLN'))
if res > 0:
return res
return None
#-----------
def get_cores_psutil():
u"""
Retorna o número de cpu usnado google psutil
http://code.google.com/p/psutil/
"""
import psutil
return psutil.NUM_CPUS
#-----------
def get_cores_windows():
u"\nRetorna o número de cores(CPUs) em máquinas Windows\n"
import os
res = int(os.environ['NUMBER_OF_PROCESSORS'])
if res > 0:
return res
return None
#-----------
def get_cores_jython():
u"\nRetorna o númeo cores(CPUs) usando interpretador jython\n"
from java.lang import Runtime
runtime = Runtime.getRuntime()
res = runtime.availableProcessors()
if res > 0:
return res
return None
#-----------
def get_cores_bsd():
u"\nRetorna o número de cores(CPUs) usando o processo externo em máquinas com sistema BSD (FreeBSD, openBSD e outras)\n"
import subprocess
sysctl = subprocess.Popen(['sysctl', '-n', 'hw.ncpu'], stdout=subprocess.PIPE)
scStdout = sysctl.communicate()[0]
res = int(scStdout)
if res > 0:
return res
return None
#-----------
def get_cores_linux():
u"\nRetorna o número de cores(CPUs) atraves da leitura do /proc/cpuinfo contando as chamadas de cada núcleo\n"
res = open('/proc/cpuinfo').read().count('processor\t:')
if res > 0:
return res
return None
#-----------
def get_cores_solaris():
u"\nRetorna o número de cores(CPUs) atravez da leitura do /devices/pseudo/ contanto um a um\n"
pseudoDevices = os.listdir('/devices/pseudo/')
expr = re.compile('^cpuid@[0-9]+$')
res = 0
for pd in pseudoDevices:
if expr.match(pd) != None:
res += 1
if res > 0:
return res
#-----------
def get_cores_unixlike():
u"""
Returna o número de cores(CPUs) analisando o arquivo de log dmesg.
Esse processo pode varias muito entre versões do sistema operacial, então esse codigo pode necessitar de ajustes.
O quê importa é a idéia do algorítimo. -- Está validado usando ubuntu 13.04 --
"""
dmesg = open('/var/log/dmesg').read() # O local varia com a distribuição
dmesgProcess = subprocess.Popen(['dmesg'], stdout=subprocess.PIPE)
dmesg = dmesgProcess.communicate()[0]
res = 0
while ' CPU' + str(res) + ': ' in dmesg: # faz o loog enquando ' CPU
res += 1
if res > 0:
return res
return None
Nenhum comentário:
Postar um comentário