Python multiprocessing.cpu_count()在4核Nvidia Jetson TK1上返回“1”

2024-05-13 21:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁能告诉我,当在一个有四个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作为列表元素之一。


Tags: inimportselfforstatuscountproccpu
2条回答

在Linux系统上,multiprocessing.cpu_count()依赖于sysconf (_SC_NPROCESSORS_ONLN)调用,该调用返回联机CPU的数量,而sysconf (_SC_NPROCESSORS_CONF)返回配置CPU的数量。

在具有高级CPU电源管理功能(设置CPU核心脱机以节省能源)或具有类似的动态CPU激活功能的系统中,这些值可能会有所不同。

os.cpu_count()的文档(声明它返回的是cpu的总数,而不是可用cpu的数目)提供了计算可用cpu的方法:

len(os.sched_getaffinity(0))

https://docs.python.org/3/library/os.html#os.cpu_count

相关问题 更多 >