【发布时间】:2015-09-29 10:16:16
【问题描述】:
谁能告诉我为什么 Python 的 multiprocessing.cpu_count() 函数在具有四个 ARMv7 处理器的 Jetson TK1 上调用时会返回 1?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
Jetson TK1 板或多或少是开箱即用的,没有人弄乱 cpuset。在同一个 Python shell 中,我可以打印 /proc/self/status 的内容,它告诉我该进程应该可以访问所有四个内核:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
还有什么可能导致cpu_count() 的这种行为?
编辑:
为了检验 Klaus 的假设,我使用以下代码运行了一个非常简单的实验:
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 会作为列表元素之一出现。
【问题讨论】:
标签: python cpu python-multiprocessing