python - 以编程方式为基于 Python 的 OpenGL 程序设置 NvOptimusEnablement
问题描述
有没有办法在 Python 脚本中使用 OpenGL(尤其是使用 Qt 的应用程序)以编程方式为基于 Python 的应用程序设置 NvOptimusEnablement 标志?
到目前为止,我看到的所有参考资料——例如在 nVidia Optimus或https://stackoverflow.com/a/39047129/6531515中以编程方式选择集成显卡——都是针对 C/C++ 的,其中标志需要设置为全局定义哪个编译成可执行文件,但显然在这种情况下不起作用。
是唯一的选择:
- 使用此标志集创建自定义 Python 解释器包装器(例如https://github.com/cprogrammer1994/optimuspy),或者
- 强制用户将 Python / pyinstaller-created-binary 显式标记为需要他们使用的每台机器的 Nvidia GPU?
解决方案
问题是在创建进程时系统必须知道这些标志。这是有道理的,因为此时可以开始分配 GPU 资源。它们仅在从运行的可执行文件或静态链接到它的库中公开时才起作用,它不适用于动态链接的库。
因此,除了运行已使用此标志编译的 Python 解释器,或Python.exe
从 Nvidia 控制面板配置应使用的图形处理器外,别无他法。
但是,当您使用 pyinstaller 发布应用程序时,可以编译引导加载程序以公开这些标志,因为它是程序的入口点。您只需将其添加到 main.c 中:(或使用我的 pyinstaller 分支:https ://github.com/pvallet/pyinstaller )
__declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
这篇文章解释了如何做到这一点:如何重新编译 Pyinstaller 的引导加载程序
推荐阅读
- php - 运行时错误 - 未捕获(承诺中):[object Object]
- soap - 使用 suds 库在 RobotFramework 中测试 Soap 1.2 服务
- macos - 终端:恢复文件名顺序
- java - 性能静态初始化
- python - python 上的 Apache Tika 从 MacBook Pro 上的 pdf 中提取文本,但不是 Windows 服务器
- java - 边界框无法正常工作 - /withkinect
- ios - Swift iOS - 如果发现错误,请尽早跳出状态
- java - 分页库最初返回空列表
- ios - 在 Swift 中以编程方式从主 TabBarController 转到嵌套的 ViewController
- algorithm - 如何将无向图转换为每个节点最多有 K 个父节点的有向图?