Can anyone tell me why Python's multiprocessing.cpu_count()
function would return 1
when called on a Jetson TK1 with four ARMv7 processors?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
The Jetson TK1 board is more or less straight out of the box, and no one has messed with cpusets. From within the same Python shell I can print the contents of /proc/self/status
and it tells me that the process should have access to all four cores:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
What else could be causing this behavior from cpu_count()
?
Edit:
To test Klaus's hypothesis, I used the following code to run a very simple experiment:
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])
Which produced the following output:
[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]
Running just a single iteration of p.map(f, [1,2,3,4,5])
usually produces [1, 1, 1, 1, 1]
, although occasionally a 2
will appear as one of the list elements.
See Question&Answers more detail:
os