有谁能告诉我,当在一个有四个ARMv7处理器的Jetson TK1上调用Python的multiprocessing.cpu_count()函数时,为什么它会返回1?>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
Jetson TK1板或多或少都是开箱即用的,而且没有人把cpusets弄乱。在同一个Python shell中,我可以打印/proc/self/status的内容,它告诉我进程应该可以访问所有四个核心:>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
还有什么可能导致这种行为?
编辑:
为了验证克劳斯的假设,我使用以下代码运行了一个非常简单的实验: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])
产生了以下输出:[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]
只运行一次p.map(f, [1,2,3,4,5])迭代通常会生成[1, 1, 1, 1, 1],尽管偶尔会出现一个2作为列表元素之一。