Python在多核上自动运行多线程



环境: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)进行许多常见操作。根据这些库在您的系统上的实现,许多操作都针对多处理进行了优化。

最新更新