2015-07-10 246 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