并行地从磁盘加载多个文件时,有什么速度可以提高吗?

2024-05-20 04:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目(用python 2.7写的),在那里我处理了1000个图像,每个图像大约2.7MB大小。目前,工作流程如下:

  • 1进程将图像从磁盘顺序加载到multiprocessing.Manager().Queue()
  • N进程使用队列中的图像进行预处理,并将结果存储在第二个队列中
  • 1进程从第二个队列中获取图像并将其保存到磁盘(较小的文件,不是真正的问题)

到目前为止,这工作得很好,我可以产生足够的预处理过程,因此从磁盘加载成为瓶颈。你知道吗

为了好玩和学习,我尝试使用两个进程,每个进程从磁盘加载一半的文件,并将它们放在同一个队列中。我想看看这是否能让我更快地从磁盘加载数据。
但是,由于我的设置(带有ZFS和各种缓存层的hdd),这种“优化”的结果是不确定的,甚至在两次相同的运行之间也可能有很大的差异。数字有点表明并行加载速度要快得多,但随着所有缓存的进行,我对计时失去了信任(从55秒到7秒的值以及介于两者之间的值…。
另外,到目前为止,我正在Linux系统上进行测试,但是生产机器运行的是带有SSD的Windows。所以无论我在测试中得到什么结果,它们可能是特定于操作系统的,而不适用于最终用例。你知道吗

我的问题是:并行加载多个文件有什么好处吗?或者,让一个进程按顺序加载所有文件就足够了,因为它将以硬盘允许的速度读取文件?我不一定要寻找特定于python的答案,而是一般的file-I/O。
Linux和Windows之间有什么重要的区别吗?你知道吗


免责声明:
我知道这可以通过在目标机器上进行过度的基准测试来解决。但是,一个全面的基准测试此时需要大量的代码重写,目标机器上的访问时间(可能需要重新启动,以清除文件系统缓存)也比我目前拥有的要多。你知道吗


Tags: 文件项目图像机器目标队列进程顺序