如何在Python中提高磁盘读取速度
我使用Python进行图像分析。我的代码的第一步是将图像从磁盘加载到一个大的20GB uint8阵列。这一步需要很长时间,加载速度约为10MB/s,并且在任务期间CPU空闲。如何在Python中提高磁盘读取速度
这似乎非常缓慢。我是否犯了一个明显的错误?我该如何提高性能?这是否是numpy数组类型的问题?
# find all image files in working folder
FileNames = [] # FileNames is a list of image names
workingFolder = 'C:/folder'
for (dirpath, dirnames, filenames) in os.walk(workingFolder):
FileNames.extend(filenames)
FileNames.sort() # Sorted by image number
imNumber = len(FileNames) # Number of Images
# AllImages initialize
img = Image.open(workingFolder+'/'+FileNames[0])
AllImages = np.zeros((img.size[0],img.size[1], imNumber),dtype=np.uint8)
for ii in range(imNumber):
img = Image.open(workingFolder+'/'+FileNames[ii])
AllImages[:,:,ii] = img
非常感谢您的帮助。
由于CPU空转,它听起来是磁盘是瓶颈。 10 Mb/s的速度有点慢,但并不慢,它让我想起了石器时代的硬盘。如果它是numpy
我希望CPU忙于运行numpy
代码,而不是闲置。
请注意,CPU可能有两种等待磁盘的方式。当然,首先你需要从磁盘读取数据,但是由于数据是20GB,数据可能会大到需要将其交换到磁盘。这种情况的正常解决方案是内存映射文件(这将避免将数据从磁盘移动到交换)。
尝试检查您是否可以通过其他方式更快地读取文件。例如在linux上,你可以使用dd if=/path/to/image of=/tmp/output bs=8k count=10k; rm -f /tmp/output
来检查读到RAM的速度。有关检查磁盘性能的更多信息,请参阅this question。
SSD速度非常快,读取速度至少为200MB/s,对于较小的数据集也存在问题,但显然不是限制性的。这不是交换问题,因为仍然有大约10GB的免费Ram,并且任务管理器在此过程中没有写入磁盘。谢谢你的帮助。 – LapLap
这可能是因为你的硬盘速度很慢。你有没有通过其他方式测试它的速度?如果硬盘读/写速度是瓶颈,你的CPU将闲置。 –
传输文件时,传输速度始终高于150MB/s,相信计算机中较慢的HDD会造成瓶颈。 – LapLap