2015-07-10 161 views
17

每这个问题和答案 - Python multiprocessing.cpu_count() returns '1' on 4-core Nvidia Jetson TK1 - Python的multiprocessing.cpu_count()功能对某些系统的输出反映CPU的积极的使用的数量,而不是数量的CPU实际上是可用通过调用Python程序。便携式方式

一个常见的Python习惯用法是使用返回值cpu_count()初始化Pool中的进程数。但是,在使用这种“动态CPU激活”策略的系统上,该惯用法相当糟糕(至少在相对静态的系统上)。

有一些简单的(和便携式)的方式来获得在可用处理器数量从Python的(如在使用反对数目前)?

注:

  1. 这个问题是不被接受的答案回答到How to find out the number of CPUs using python,因为在这个问题上链接的问题如前所述,打印的/proc/self/status内容显示所有4个核心可用于该程序。

  2. 在我看来,“便携式”排除任何涉及解析内容的方法,其格式可能因Linux的发布而不同,甚至在OS X上甚至不存在。(同样的方法任何其他伪文件,也是如此。)

回答

6

我不认为你会得到任何真正便携的答案,所以我会给出一个正确的一个。

正确*答案Linux是len(os.sched_getaffinity(pid)),其中pid可能0当前进程。这个函数在Python 3.3及更高版本中公开;如果你在早些时候需要它,你将不得不做一些花式的编码cffi

编辑:你可能试着看看你是否可以使用函数int omp_get_num_procs();如果它存在,它是我在this question上发现的唯一有意义的答案,但我没有从Python尝试过。

+0

Dang,对我来说很糟糕,我使用Python 2.7。 :-)现在踢球(得到真正的交付物,你知道吗?),但最终我可能会深入研究'cffi',这给了我一个很好的例子。 – Hephaestus