找到psutil后,我做了一个简单的实验。有一个完整的 IO 基础函数,可以从文件中重复读取一些 numpy 数组(每个文件都有 763M 大小)。然后,在 100 秒后使用“cpu_times”测量函数的使用时间。我预计大部分时间都在 iowait 上,但结果如下:
pcputimes(user=22.92, system=77.1, children_user=0.0, children_system=0.0, iowait=0.0)
为什么iowait为零?为什么系统的大部分时间都过去了?
代码如下:
def io_read_bound():
i=0
while True:
a = np.load("/tmp/a%d.npy"%i)
print(a.sum()) # for forcing use of data
i = (i+1)%10
p = multiprocessing.Process(target=io_read_bound)
p.start()
ps = psutil.Process(p.pid)
time.sleep(100)
print(ps.cpu_times())
这个写numpy数组的实验结果是合理的,74%的时间都是为了iowait。