Anaconda环境下Numpy如何启用多线程/多进程?
解决Anaconda下Numpy(OpenBLAS)多线程失效问题
核心问题定位
你的测试代码存在语法错误,导致未触发OpenBLAS的多线程优化:
A = np.random.random((size, size)), # 末尾多余的逗号让A变成了包含ndarray的元组
当调用np.dot(A, B)时,实际是对元组和数组执行dot操作,而非两个二维数组的矩阵乘法,这会绕过OpenBLAS的优化实现,自然无法启用多线程。
修复步骤
- 修正测试代码
去掉A定义末尾的逗号,确保A和B都是二维ndarray:
import os import numpy as np from timeit import timeit size = 1024 A = np.random.random((size, size)) B = np.random.random((size, size)) print 'Time with %s threads: %f s' \ %(os.environ.get('OPENBLAS_NUM_THREADS', 'unset'), timeit(lambda: np.dot(A, B), number=4))
- 正确设置环境变量
OpenBLAS优先读取OPENBLAS_NUM_THREADS而非OMP_NUM_THREADS,且环境变量必须在Python进程启动前设置:
# 终端临时设置 export OPENBLAS_NUM_THREADS=4 python your_test_script.py # 针对conda环境永久生效 echo "export OPENBLAS_NUM_THREADS=4" >> ~/anaconda3/envs/py2env/etc/conda/activate.d/env_vars.sh
- 验证OpenBLAS多线程支持
检查OpenBLAS是否编译了多线程支持:
openblas-config --show-config
如果输出中没有USE_OPENMP=1或PTHREADS相关字样,重新安装支持多线程的OpenBLAS包:
conda install -c conda-forge openblas=0.2.20 --force-reinstall
内容的提问来源于stack exchange,提问作者Botond
相关产品推荐
相关产品推荐

