为什么单个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?