为何未启用多进程时healpy的projmap函数仍占用全部核心?
healpy projmap占用全部核心的问题解决
为什么会自动并行?
- healpy底层依赖的数值计算库(比如OpenMP加速的BLAS、LAPACK,或是numpy)默认会启用多线程,哪怕你没写任何多进程/多线程代码,这些库会自动拉满所有可用核心。
- 大概率是healpy版本更新后默认开启了内部并行,或是你的系统里numpy、OpenMP这类依赖的配置变了,导致突然开始用多核心。
强制单核心运行的几种方法
1. 提前设置环境变量限制线程数
在导入healpy、numpy之前,先设置以下环境变量,把所有数值计算库的线程数锁死为1:
import os # 限制各类并行计算库的线程数 os.environ["OMP_NUM_THREADS"] = "1" os.environ["MKL_NUM_THREADS"] = "1" os.environ["NUMEXPR_NUM_THREADS"] = "1" os.environ["OPENBLAS_NUM_THREADS"] = "1"
这个方法最稳妥,直接从底层掐断多线程的可能。
2. 用healpy自带函数设置线程数
部分healpy版本支持直接通过内置函数指定线程数,在调用projmap之前加一行:
import healpy as hp hp.set_nthreads(1)
3. 检查自定义函数的并行可能
虽然你的vec2pix是lambda函数,但如果pixelfunc里有隐式并行逻辑,也会导致多核心占用。不过这种情况概率很低,优先试前两种方法。
内容的提问来源于stack exchange,提问作者Simone Sartori
相关产品推荐
相关产品推荐

