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

如何在Windows上优先通过环境变量限制os.cpu_count返回的CPU核心数?

解决方案

你此前尝试的方案未生效的核心原因:Windows版本的Python内置os.cpu_count底层调用Win32 API GetSystemInfo获取系统全局逻辑处理器总数,既不读取NUMBER_OF_PROCESSORS环境变量,也不感知进程CPU亲和性限制,因此上述操作无法修改该函数的返回值。

以下方案均无需修改原应用代码,按稳定性优先级排序:

方案1:使用微软官方兼容性垫片伪造CPU核心数(最推荐)

这是微软官方提供的适配方案,专门用于处理对核心数敏感的旧程序,配置后仅对目标应用生效,完全不影响其他程序运行:

  • 在微软官方站点搜索「Windows 评估和部署工具包(ADK)」下载安装,安装时仅勾选「应用程序兼容性工具」组件即可
  • 打开兼容性管理员(Compatibility Administrator),新建自定义数据库,添加你要限制的第三方exe程序,添加兼容性垫片时选择Processor Count,设置数值为2
  • 保存数据库后安装该兼容性规则,之后该程序启动时会自动被伪造CPU核心数为2,os.cpu_count直接返回2,每个应用最多启动2个工作进程

方案2:PowerShell单进程临时设置环境变量(适配老版本Python打包程序)

部分使用Python 3.8以下版本打包的程序,os.cpu_count会 fallback 读取进程独有环境变量中的NUMBER_OF_PROCESSORS,你可以通过以下方式为单个进程单独设置该变量,不会修改全局环境变量:

# 仅为当前PowerShell会话设置临时环境变量,仅对当前会话启动的子进程生效
$env:NUMBER_OF_PROCESSORS = 2
# 启动目标应用
.\你的第三方应用路径.exe

启动完成后关闭PowerShell窗口,环境变量自动失效。

方案3:API Hook 拦截返回值(特殊场景使用)

如果上述方案都不生效,可以使用轻量Hook工具拦截目标程序的GetSystemInfo调用,强制修改返回的处理器数值为2:

  • 自行编写仅Hook GetSystemInfo修改dwNumberOfProcessors字段的极小DLL
  • 启动目标程序时用Process Hacker等工具自动注入DLL即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:57:01