Python multiprocessing.cpu_count () devuelve '1' en Nvidia Jetson TK1 de 4 núcleos
¿Alguien puede decirme por qué Pythonmultiprocessing.cpu_count()
la función volvería1
cuando cuando se llama en un Jetson TK1 con cuatro procesadores ARMv7?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
El tablero Jetson TK1 es más o menos directo de la caja, y nadie se ha metido con cpusets. Desde el mismo shell de Python puedo imprimir el contenido de/proc/self/status
y me dice que el proceso debería tener acceso a los cuatro núcleos:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
¿Qué más podría estar causando este comportamientocpu_count()
?
Para probar la hipótesis de Klaus, utilicé el siguiente código para ejecutar un experimento muy simple:
import multiprocessing
def f(x):
n = 0
for i in xrange(10000):
n = max(n, multiprocessing.cpu_count())
return n
p = multiprocessing.Pool(5)
for i in range(10):
print p.map(f, [1,2,3,4,5])
Que produjo el siguiente resultado:
[3, 3, 3, 3, 1]
[4, 3, 3, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[3, 3, 3, 4, 3]
[4, 3, 3, 3, 3]
Ejecutando solo una iteración dep.map(f, [1,2,3,4,5])
generalmente produce[1, 1, 1, 1, 1]
, aunque ocasionalmente un2
aparecerá como uno de los elementos de la lista.