我有一个函数 foo
消耗大量内存,我想并行运行多个实例。
假设我有一个有 4 个物理内核的 CPU,每个物理内核有两个逻辑内核。
我的系统有足够的内存来并行容纳 foo
的 4 个实例,但不能容纳 8 个。此外,由于这 8 个内核中有 4 个是逻辑内核,我也不希望使用所有 8 个内核会提供比上面更多的收益并且不仅仅使用 4 个物理的。
所以我 只想 在 4 个物理内核上运行 foo
。换句话说,我想确保做 multiprocessing.Pool(4)
(由于内存限制,4 是我可以在这台机器上容纳的函数的最大并发运行数)将作业分派到四个物理内核(而不是,例如,两个物理核心及其两个逻辑后代的组合)。
如何在 python 中做到这一点?
编辑:
我之前使用了来自 multiprocessing
的代码示例,但我是库不可知论者,所以为了避免混淆,我删除了它。
原文由 user189035 发布,翻译遵循 CC BY-SA 4.0 许可协议
我找到了一个不涉及更改 python 模块源代码的解决方案。它使用 此处 建议的方法。通过执行以下操作,可以在运行该脚本后检查是否只有物理内核处于活动状态:
在 bash 返回中:
[可以从 python 中运行上面链接的脚本]。在任何情况下,运行上面的脚本后,在 python 中输入这些命令:
返回 4。