Python3会自动使用所有内核吗?

时间:2016-06-08 19:08:13

标签: performance python-3.x multiprocessor

我刚刚使用python3遇到了一些奇怪的性能“问题”/“获得”。以下代码加载5个权重矩阵并将它们应用于相当大的数据集。这样做时,它会将每一行写入磁盘。

执行此程序时,所有八个处理器都被占用了100%。

python是否自动在多个线程上执行程序?如果是的话,有没有关于此的文件?如果没有,那么这个程序怎么能消耗octcore上的所有8个处理器?

if (window.location.href.indexOf('Locate_an_eyecare_professional') > -1) {
  var body = document.getElementsByTagName("BODY")[0];
  var img = document.createElement("img");
  img.className = 'img-responsive'
  img.src = '~/Content/Images/Template 5A Filmstrip.jpg';
  body.appendChild(img);
}

2 个答案:

答案 0 :(得分:1)

使用八个内核的原因是因为在Linux上,如果可用,BLAS将自动使用它们。因此处理器时间主要用于numpy.dot操作。

答案 1 :(得分:1)

我最近读了一篇关于这个主题的有趣文章,我觉得它对你很有意思:Python has been held back by its inability to natively use multiple CPU cores. Now Pythonistas are aiming to find a solution。为了回答你的问题,我引用了文章的第一段。

  

对于所有Python的优秀和便捷功能,一个目标仍然遥不可及:在CPython上运行的Python应用程序引用解释器并且并行使用多个CPU内核。 ...实际上,可以在Python应用程序中使用线程 - 其中很多已经可以使用。 CPython不可能运行多线程应用程序,每个线程在不同的核心上并行执行。 CPython的内部内存管理不是线程安全的,因此解释器一次只运行一个线程,根据需要在它们之间切换并控制对全局状态的访问。

因此,简短的回答是:可以在Python中运行多个线程,但目前它并不自动并行使用多个核心。但是,已开始实施此功能的工作。

另外,我应该指出这是关于CPython,Python的参考实现。不幸的是,我不知道其他实现是否有相同的问题。