为什么单个Python进程的CPU使用率可能超过100%?

由于GIL,我认为多线程python进程一次只能运行一个线程,因此cpu的使用率不能超过100%。

但是我发现这个代码可以占用顶部950%的cpu使用量。

import threading
import time

def f():
    while 1:
        pass


for i in range(10):
    t = threading.Thread(target=f)
    t.setDaemon(True)
    t.start()

time.sleep(60)

这不是Python解释器使用多达130%CPU的问题。 这怎么可能? 在那个问题中,OP说他正在进行I / O密集型负载测试 ,可能会释放GIL。 但在我的程序中,没有I / O操作。

测试在CPython 2.6.6上运行。


一个原因可能是你使用的方法达到950%。 有一个称为(avg)加载的数字,在阅读文档之前,这可能不是人们所期望的。

加载是处于运行状态或可运行状态(在CPU时间队列中)的(平均)线程数。 如果你喜欢在你的例子中有一个忙线循环线程,而一个线程正在运行,另外九个线程处于可运行状态(在一个时隙的队列中)。

负载表示您可以使用多少个内核。 或者你的程序想要使用多少CPU功率(不一定是它使用的实际CPU功率)。


我认为在这种情况下,CPU忙于做线程切换而不是做一些实际的工作。 换句话说,线程切换器正在使用所有的CPU来完成它的工作,但是Python循环代码运行得太快而不能引起可观察的CPU使用率。 我尝试添加一些真实的计算如下,CPU使用率下降到200%左右。 如果您添加更多计算,我相信CPU使用率将非常接近100%。

def f():
    x=1
    while 1:
        y=x*2
链接地址: http://www.djcxy.com/p/86487.html

上一篇: Why single python process's cpu usage can be more than 100 percent?

下一篇: python + wsgi on a multi