阻止Python使用多个cpu

时间:2012-05-03 08:42:39

标签: python multithreading parallel-processing cpu-usage

当我使用python运行脚本时遇到问题。我没有在python中进行任何并行化,也没有调用任何mpi来运行脚本。我只执行“python myscript.py”,它应该只使用1个cpu。

然而,当我查看命令“top”的结果时,我发现python几乎占用了我cpus的390%。我有一个四核,所以8个线程。我不认为这有助于我的脚本运行得更快。所以,我想了解为什么python使用多个cpu,并阻止它这样做。

有趣的是,当我运行第二个脚本时,那个也占用了390%。如果我运行第三个脚本,每个脚本的CPU使用率下降到250%。前一段时间我和matlab有类似的问题,我解决它的方法是使用-singlecompthread启动matlab,但我不知道如何处理python。

如果有帮助,我在我的脚本中解决泊松方程(根本没有并行化)。


更新: 我的朋友在他自己的计算机上运行代码,它只需要100%的CPU。我不使用任何BLAS,MKL或任何其他东西。我仍然不知道400%cpu使用的原因是什么。 有一个来自SLATEC库的fortran算法,它解决了Ax = b系统。我认为那部分是使用了很多cpu。

3 个答案:

答案 0 :(得分:2)

您的代码可能正在调用一些使用C / C ++ /等的函数。下。在这种情况下,可以使用多个线程。

您是否正在调用任何只对某些更高效实现的函数进行python绑定的库?

答案 1 :(得分:1)

您始终可以设置进程关联,以便它只在一个cpu上运行。在linux上使用“taskset”命令,或在Windows上使用explorer。

这样,您应该能够知道您的脚本是否使用一个或更多cpu具有相同的性能。

答案 2 :(得分:1)

您的代码是否可以使用SciPy或其他数字库来链接英特尔MKL或其他供应商提供的使用OpenMP的库?如果使用OpenMP并行化基础C / C ++代码,则可以通过将环境变量OMP_NUM_THREADS设置为1来将其限制为单个线程:

OMP_NUM_THREADS=1 python myscript.py

如果与相应的并行驱动程序(默认链接行为)链接,英特尔MKL肯定在许多地方(LAPACK,BLAS和FFT函数)是并行的,并且默认情况下启动的计算线程数与可用CPU核心数一样多。