Skip to main content
 首页 » 编程设计

python之防止 scipy 进行多处理

2025年05月04日18cloudgamer

我正在使用 scipy 来计算向量的旋转。以下代码是重现我的问题的最小代码。它在数学上不一定正确。

import numpy as np  
from scipy.linalg import expm 
 
axis = np.array([5.0, 8.0, -2.0]) 
axis = axis/(np.sum(axis**2)**0.5) 
 
theta = 0.001 
 
 
for t in range(1000000): 
    cx = np.cross(np.eye(3), axis*theta) 
    M0 = expm(cx) 
    cx = np.dot(M0, cx)  
 
print cx 

我的问题是运行这段代码占用了我 300% 的 CPU,即在 3 个内核上运行。我相信这是由于 scipy.linalg.expm 函数造成的,因为单独的 numpy 函数最多只使用了 100%。我的问题是,如何将 scipy 配置为仅使用单核?

我不记得曾经将它链接到任何 linalg 库,但这是我的配置:

#numpy 
numpy.__config__.show() 
lapack_opt_info: 
    libraries = ['openblas', 'openblas'] 
    library_dirs = ['/usr/local/lib'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
blas_opt_info: 
    libraries = ['openblas', 'openblas'] 
    library_dirs = ['/usr/local/lib'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
openblas_info: 
    libraries = ['openblas', 'openblas'] 
    library_dirs = ['/usr/local/lib'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
blis_info: 
  NOT AVAILABLE 
openblas_lapack_info: 
    libraries = ['openblas', 'openblas'] 
    library_dirs = ['/usr/local/lib'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
lapack_mkl_info: 
  NOT AVAILABLE 
blas_mkl_info: 
  NOT AVAILABLE 
 
 
#scipy 
scipy.__config__.show() 
lapack_opt_info: 
    libraries = ['openblas'] 
    library_dirs = ['/usr/local/lib'] 
    language = f77 
blas_opt_info: 
    libraries = ['openblas'] 
    library_dirs = ['/usr/local/lib'] 
    language = f77 
openblas_info: 
    libraries = ['openblas'] 
    library_dirs = ['/usr/local/lib'] 
    language = f77 
openblas_lapack_info: 
    libraries = ['openblas'] 
    library_dirs = ['/usr/local/lib'] 
    language = f77 
blas_mkl_info: 
  NOT AVAILABLE 

请您参考如下方法:

这可能是 openblas 在 C 级别上的多线程,而不是 python 级别的多处理。尝试设置环境变量 OPENBLAS_NUM_THREADS=1