Python multiprocessing.cpu_count () retorna '1' na Nvidia Jetson TK1 de 4 núcleos
Alguém pode me dizer por que Pythonmultiprocessing.cpu_count()
função retornaria1
quando quando chamado em um Jetson TK1 com quatro processadores ARMv7?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
A placa Jetson TK1 é mais ou menos direta e ninguém mexeu com cpusets. De dentro do mesmo shell Python, posso imprimir o conteúdo de/proc/self/status
e me diz que o processo deve ter acesso aos quatro núcleos:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
O que mais poderia estar causando esse comportamento decpu_count()
?
Para testar a hipótese de Klaus, usei o seguinte código para executar um experimento muito simples:
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 produziu a seguinte saída:
[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]
Executando apenas uma única iteração dep.map(f, [1,2,3,4,5])
geralmente produz[1, 1, 1, 1, 1]
, embora ocasionalmente um2
aparecerá como um dos elementos da lista.