环境:Openstack Ubuntu14.04vm 16个虚拟cpu。我写了一个python程序,它是CPU密集型的。它使用scipy。优化工具。我没有使用任何多进程/多线程。但是当运行它时,python进程会生成17个线程,并且所有的cpu几乎都被占用了。
运行"top"命令,你可以看到PID 4152 python进程和所有cpu被使用,像这样
运行"top -H -p 4152",你可以看到线程,像这样
那么为什么python在多核和多线程上运行,考虑到我没有做任何事情?
这是因为scipy。优化使用BLAS进行矩阵乘法等。Ubuntu 14.04默认使用OpenBLAS,而OpenBLAS默认使用所有可用的内核。
我认为你可以设置OPENBLAS_NUM_THREADS=1
环境变量,如果你想它是单线程的。
scipy使用外部库(最明显的是BLAS和LAPACK)进行许多常见操作。根据这些库在您的系统上的实现,许多操作都针对多处理进行了优化。