gpt4 book ai didi

python - 使用python测量文件的原位读写速度

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:30 28 4
gpt4 key购买 nike

我目前正在使用 python 读写大图像(使用 OpenCV 和 numpy 的 memmap 函数)。具体来说,我正在制作图像金字塔。

是否可以在 python 中监控文件的当前读写速度? IE。类似于以 MB/秒为单位的移动平均值。

我认为这不重要,但我的代码的主力部分是这样的:

    for y in range(ysize):
#Open a previously defined temp image file
bigIMG = np.memmap('tempfile.bin', dtype='uint8', mode='r+', shape=(ysize,xsize,3))

#Grap a chunk of the full image, save it, shrink it,
#and put it into the next lower level of the pyramid
for x in range(xsize):
chunk = bigIMG[y*block:(y+1)*block,x*block:(x+1)*block]
cv2.imwrite('+str(x)+"_"+str(y)+".png",chunk)
down = cv2.resize(chunk,None,fx=0.5, fy=0.5, interpolation = cv2.INTER_LINEAR)
smallerIMG[(y*block)/2:((y+1)*block)/2,(x*block)/2:((x+1)*block)/2] = down

#Flush changes to HDD
del smallerIMG

如您所见,我正在从 HDD 写入和读取大量数据,我想监控这些操作的性能。

谢谢!

最佳答案

有趣的是,您不一定要从 HDD 加载大量数据。至少您正在加载和写入的数据量高度依赖于您的系统配置。文件系统参数的微小调整可能会对读取的数据量产生巨大影响。

特别是对于内存映射(不错的选择,顺便说一句)文件,许多页面只保存在 RAM 中。我试图找出是否真的有任何方法可以查看缓存未命中(HDD 页面输入/输出),但操作系统很好地保守了它的 secret 。

你可能想尝试这样的事情:

import psutil

iocnt1 = psutil.disk_io_counters(perdisk=True)['sda1']
# do something IO intensive
iocnt2 = psutil.disk_io_counters(perdisk=True)['sda1']

print 'Blocks written {0}'.format(iocnt2.write_count - iocnt1.write_count)
print 'Blocks read {0}'.format(iocnt2.read_count - iocnt1.read_count)

当然,您必须安装 psutil 模块并将 sda1 更改为您的硬盘。

无法查看哪些写入实际上是由您的进程引起的。由于操作系统的结构,这是不可能的。它将来自不同进程的读取和写入混合并匹配到一个队列中,之后就不可能说是什么触发了写入或读取。

但是,如果您的计算机没有做任何特殊的事情,通常的写/读 IOPS 会非常低,因为大多数事情都发生在缓存中。至少您会在更改算法时看到变化。

关于python - 使用python测量文件的原位读写速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723092/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com