我刚刚使用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);
}
答案 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的参考实现。不幸的是,我不知道其他实现是否有相同的问题。