【问题标题】:Getting MD5 hash of the files is terribly slow获取文件的 MD5 哈希非常慢
【发布时间】:2015-05-12 01:27:04
【问题描述】:

我正在使用以下代码来获取多个文件的 MD5 哈希值,其中的值约为。总大小为 1GB:

md5 = hashlib.md5()
with open(filename,'rb') as f: 
    for chunk in iter(lambda: f.read(128*md5.block_size), b''): 
        md5.update(chunk)
fileHash = md5.hexdigest()

对我来说,它的速度非常快,大约需要 3 秒才能完成。但不幸的是,对于我的用户(拥有旧 PC)来说,这种方法非常慢,根据我的观察,某些用户可能需要大约 4 分钟才能获取所有文件哈希。这对他们来说是一个非常烦人的过程,但同时我认为这是最简单、最快的方法——我说的对吗?

是否有可能以某种方式加速哈希收集过程?

【问题讨论】:

  • 你试过使用更大的块吗?像 1 MB?可能对旧硬盘有益。您是否有 SSD(或足够的 RAM,可以将数据缓存在其中)?
  • @StefanPochmann 不,我没有,因为更大的块会导致更多的 RAM 使用。我个人有一个 SSD 磁盘,这就是为什么这种方法对我来说很好,但我不能对其他拥有 1GB RAM PC 和旧的慢速磁盘的用户说同样的话。
  • 1 MB 不算什么。去做吧。
  • @StefanPochmann 我会试试的,谢谢。 :-)
  • 好 :-) 那就告诉我吧。我也有一个 SSD,所以我无法实际测试它,我很好奇它是否/多快。

标签: python performance python-2.7 md5 checksum


【解决方案1】:

我的笔记本电脑也很弱,我刚刚试了一下——我也可以在四秒内md5 1 GB。去几分钟,我怀疑这不是计算,而是从硬盘读取文件。尝试读取 1 MB 块,即f.read(2**20)。这应该需要更少的读取并提高整体读取速度。

【讨论】:

  • 顺便说一句。我在我的HDD硬盘上试过了,第一次运行大约需要12秒,而第二次运行只需要2.3秒~。这可以缓存在某个地方吗?
  • 2.3 秒几乎肯定要归功于文件在 RAM 中。我怀疑你有一个可以读取 434 MB/s 的硬盘。我不确定它是否存在。不确定12秒。您可以尝试重新启动您的 PC 或在再次尝试测试之前用其他东西填充 RAM。
  • 你能告诉我你有哪个硬盘吗?
  • 这是希捷 ST2000DM001。
  • 嗯,显然可以按顺序读取 200+ MB/s,所以 12 秒听起来很合理,如果它也用小块来读取的话。顺便说一句,是 128*md5.block_size 还是建议的 1M 块?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2014-06-28
  • 2012-08-17
  • 2016-06-24
  • 2012-07-06
  • 1970-01-01
相关资源
最近更新 更多