python获取当前cpu数量
时间: 2025-08-13 10:07:05 浏览: 7
<think>我们使用Python标准库中的`os`模块或`multiprocessing`模块来获取CPU数量
注意:有两种常见的CPU数量:物理核心数和逻辑核心数(包括超线程)
通常使用`os.cpu_count()`或`multiprocessing.cpu_count()`来获取逻辑CPU核心数
如果需要物理核心数,可以使用第三方库如`psutil`,但这里我们使用标准库方法
由于问题要求使用中文回答,我们将在回答中使用中文注释
同时,按照要求,在回答后提出3-5个相关问题</think>### Python获取当前CPU数量方法
#### 标准库方法
```python
import os
import multiprocessing
# 方法1:使用os模块(推荐)
cpu_count_os = os.cpu_count()
print(f"使用os.cpu_count()获取的CPU数量: {cpu_count_os}")
# 方法2:使用multiprocessing模块
cpu_count_mp = multiprocessing.cpu_count()
print(f"使用multiprocessing.cpu_count()获取的CPU数量: {cpu_count_mp}")
# 方法3:直接读取系统文件(Linux/Unix系统)
try:
with open("/proc/cpuinfo") as f:
cpu_count_proc = sum(1 for line in f if line.startswith("processor"))
print(f"通过/proc/cpuinfo获取的CPU数量: {cpu_count_proc}")
except FileNotFoundError:
print("当前系统不支持/proc/cpuinfo文件")
```
#### 获取物理核心数(非超线程)
```python
# 需要安装psutil库: pip install psutil
import psutil
# 获取物理核心数(排除超线程)
physical_cores = psutil.cpu_count(logical=False)
print(f"物理CPU核心数量: {physical_cores}")
# 获取逻辑核心数(包含超线程)
logical_cores = psutil.cpu_count(logical=True)
print(f"逻辑CPU核心数量: {logical_cores}")
# 获取CPU详细信息
cpu_info = psutil.cpu_stats()
print(f"CPU上下文切换次数: {cpu_info.ctx_switches}")
print(f"CPU中断次数: {cpu_info.interrupts}")
print(f"软中断次数: {cpu_info.soft_interrupts}")
```
#### 跨平台兼容方案
```python
def get_cpu_info():
"""获取详细的CPU信息(跨平台)"""
import platform
system = platform.system()
if system == "Windows":
import winreg
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"HARDWARE\DESCRIPTION\System\CentralProcessor\0") as key:
cpu_name = winreg.QueryValueEx(key, "ProcessorNameString")[0]
cpu_cores = winreg.QueryValueEx(key, "NumberOfCores")[0]
return {"name": cpu_name, "physical_cores": cpu_cores, "logical_cores": os.cpu_count()}
elif system == "Linux":
cpu_info = {}
with open("/proc/cpuinfo") as f:
for line in f:
if "model name" in line:
cpu_info["name"] = line.split(":")[1].strip()
if "cpu cores" in line:
cpu_info["physical_cores"] = int(line.split(":")[1])
if "siblings" in line:
cpu_info["logical_cores"] = int(line.split(":")[1])
return cpu_info
elif system == "Darwin": # macOS
import subprocess
cmd = "sysctl -n machdep.cpu.brand_string"
cpu_name = subprocess.check_output(cmd, shell=True).decode().strip()
cmd = "sysctl -n hw.physicalcpu"
physical_cores = int(subprocess.check_output(cmd, shell=True).decode())
cmd = "sysctl -n hw.logicalcpu"
logical_cores = int(subprocess.check_output(cmd, shell=True).decode())
return {"name": cpu_name, "physical_cores": physical_cores, "logical_cores": logical_cores}
else:
return {"error": "Unsupported operating system"}
# 使用示例
cpu_details = get_cpu_info()
print(f"CPU详细信息: {cpu_details}")
```
### 应用场景示例
#### 1. 优化多线程/多进程任务
```python
# 根据CPU核心数自动设置线程池大小
from concurrent.futures import ThreadPoolExecutor
max_workers = os.cpu_count() or 4 # 默认为4个线程
with ThreadPoolExecutor(max_workers=max_workers) as executor:
results = list(executor.map(lambda x: x**2, range(100)))
```
#### 2. 资源监控仪表盘
```python
# 实时CPU监控
import time
import psutil
def monitor_cpu(interval=1):
"""实时显示CPU使用率"""
print("CPU使用率监控 (按Ctrl+C退出)")
try:
while True:
usage = psutil.cpu_percent(interval=interval, percpu=True)
for i, percent in enumerate(usage):
print(f"核心 {i}: {percent}%", end=" | ")
print() # 换行
except KeyboardInterrupt:
print("\n监控已停止")
# 启动监控
monitor_cpu()
```
### 注意事项
1. **容器环境特殊处理**:
```python
# 在Docker容器中获取真实的CPU限制
def get_container_cpu_limit():
"""获取容器分配的CPU资源"""
try:
# 读取cgroup配置
with open("/sys/fs/cgroup/cpu/cpu.cfs_quota_us") as f:
quota = int(f.read().strip())
with open("/sys/fs/cgroup/cpu/cpu.cfs_period_us") as f:
period = int(f.read().strip())
if quota > 0 and period > 0:
return max(1, quota // period)
except:
pass
return os.cpu_count() # 回退到主机CPU数
```
2. **硬件虚拟化环境**:
```python
# 检测是否在虚拟机中运行
import subprocess
def is_virtual_machine():
"""检测当前是否在虚拟机中运行"""
try:
# Linux系统检查
if os.path.exists("/sys/class/dmi/id/product_name"):
with open("/sys/class/dmi/id/product_name") as f:
product = f.read().lower()
if any(vm in product for vm in ["vmware", "virtual", "kvm", "xen"]):
return True
# Windows系统检查
output = subprocess.check_output("systeminfo", shell=True).decode()
if "Virtual Machine" in output or "Hyper-V" in output:
return True
except:
pass
return False
```
3. **CPU亲和性设置**:
```python
# 将进程绑定到特定CPU核心
import psutil
def set_cpu_affinity(pid=None, cores=None):
"""设置进程的CPU亲和性"""
p = psutil.Process(pid or os.getpid())
if cores is None:
cores = list(range(os.cpu_count())) # 使用所有核心
p.cpu_affinity(cores) # 绑定到指定核心
```
阅读全文
相关推荐




















