如何在Python中获取每个核心的线程数

5

我的电脑CPU有4个核心,每个核心有2个线程,通过lscpu命令可以获得此信息:

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   48 bits physical, 48 bits virtual
CPU(s):                          4
On-line CPU(s) list:             0-3
Thread(s) per core:              2
...

我可以使用Python标准库的 multiprocessing.cpu_count() 方法来获取CPU核心数量,但是我无法找到一种通过Python获取每个核心线程数的方法。我知道可以执行 lscpu 命令并解析输出来获得线程数,但是否有标准解决方案?

2个回答

9

你可以在Python3中使用psutil模块。

python3 -m pip install psutil

psutil.cpu_count 方法返回系统中逻辑 CPU 的数量(在 Python 3.4 中与 os.cpu_count 相同),如果无法确定则返回 None。逻辑核心是指物理核心数乘以每个核心可以运行的线程数(这称为超线程)。如果逻辑参数为 False,则仅返回物理核心数(不包括超线程 CPU),如果无法确定则返回 None。

import psutil

threads_count = psutil.cpu_count() / psutil.cpu_count(logical=False)

我尝试了这个解决方案,但是两个命令对我来说都返回4!预期结果是2。 - Amir Fo
在我的Ubuntu上可以运行。@AmirFo 你使用的是什么系统/操作系统? - Jonatan Öström
我也在使用Ubuntu! - Amir Fo

4
[编辑]: 如果你只需要每个核心的线程数,你可以像这样做(OSXlinux):
import psutil
print(f'thread count per core: {psutil.cpu_count() // psutil.cpu_count(logical=False)}')

你需要尝试在 windows 上运行,我无法确定是否可行。


linux 上,您可以使用标准库中的 subprocess 模块像这样从 Python 运行您的命令:

p = subprocess.run(['lscpu'], capture_output=True, text=True)
print(f'lscpu: {p.stdout}')

这个命令在 OSX 上不存在,在 windows 上我不确定。


正如我在问题中提到的那样,我可以自己完成这个任务,问题是如何使用Python标准库来实现它! - Amir Fo
这是Python代码,而subprocess来自标准库 - 你所说的“Python标准”具体指什么?你使用的是哪个系统(操作系统)? - Reblochon Masque
你可以通过执行 lscpu 命令来获取处理器数量,但这仅适用于Linux系统,无法在Windows或OSX中使用。Python标准库提供了 multiprocessing.cpu_count() 这样的信息库,可在任何操作系统上运行。 - Amir Fo
感谢您提供的详细信息;我已编辑我的答案以满足这些新要求。 - Reblochon Masque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接