我有一个使用库的有点大的代码numpy, scipy, sklearn, matplotlib
。我需要限制 CPU 使用率以阻止它消耗我计算集群中的所有可用处理能力。按照这个答案,我实现了以下代码块,该代码块在脚本运行后立即执行:
import os
parallel_procs = "4"
os.environ["OMP_NUM_THREADS"] = parallel_procs
os.environ["MKL_NUM_THREADS"] = parallel_procs
os.environ["OPENBLAS_NUM_THREADS"] = parallel_procs
os.environ["VECLIB_MAXIMUM_THREADS"] = parallel_procs
os.environ["NUMEXPR_NUM_THREADS"] = parallel_procs
我的理解是,这应该将使用的核心数量限制为 4,但显然这并没有发生。这是htop
为我的用户和该脚本显示的内容:
有 16 个进程,其中 4 个显示 CPU 百分比高于 100%。这是以下内容的摘录lscpu
:
CPU(s): 48
On-line CPU(s) list: 0-47
Thread(s) per core: 2
Core(s) per socket: 12
Socket(s): 2
我还在multiprocessing
我的代码中使用该库。我使用multiprocessing.Pool(processes=4)
. 如果没有上面显示的代码块,脚本坚持使用尽可能多的内核显然multiprocessing
完全忽略了。
那么我的问题是:当我使用上面的代码时,我有什么限制?我应该如何解释htop
输出?