You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取Apple Silicon性能核心的数量?

如何在Python中获取Apple Silicon的性能/效率核心数(无需调用sysctl shell命令)

可以通过ctypes直接调用macOS的系统API sysctlbyname来实现,无需启动子进程执行shell命令,这种方法在PyInstaller打包后的应用中也能正常工作——因为ctypes是Python标准库的一部分,打包时会被自动包含。

实现代码示例

import ctypes
from ctypes import c_int, c_size_t, c_char_p

def get_sysctl_int(name: str) -> int:
    # 初始化存储结果的变量
    result = c_int()
    result_size = c_size_t(ctypes.sizeof(result))
    
    # 调用sysctlbyname获取系统参数值
    if ctypes.CDLL(None).sysctlbyname(
        c_char_p(name.encode()),
        ctypes.byref(result),
        ctypes.byref(result_size),
        None,
        c_size_t(0)
    ) != 0:
        raise OSError(f"获取sysctl参数 {name} 失败")
    
    return result.value

# 获取性能核心(Performance Cores,对应perflevel0)的逻辑核心数
perf_core_count = get_sysctl_int("hw.perflevel0.logicalcpu_max")
# 获取效率核心(Efficiency Cores,对应perflevel1)的逻辑核心数
eff_core_count = get_sysctl_int("hw.perflevel1.logicalcpu_max")

print(f"性能核心数: {perf_core_count}")
print(f"效率核心数: {eff_core_count}")

代码说明

  • sysctlbyname是macOS原生系统函数,用于通过参数名称获取系统控制信息,我们通过ctypes.CDLL(None)直接加载系统库调用它,完全不需要依赖外部进程。
  • 封装的get_sysctl_int函数统一处理参数编码、内存分配和错误判断,简化了不同sysctl参数的调用流程。
  • 这种方法没有额外开销,兼容性强,PyInstaller打包后无需额外配置即可运行。

补充说明

部分新版本的psutil库已经支持识别Apple Silicon的核心架构,但如果需要精准区分性能/效率核心,还是需要依赖sysctl的相关参数——上面的ctypes实现是最直接的原生方案,不需要额外安装第三方库。

内容的提问来源于stack exchange,提问作者gernophil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:29:54