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