【发布时间】:2016-02-26 00:09:48
【问题描述】:
我有一个大文件,我将使用 Python 分块上传。每个块约为 4MB,文件可能非常大。我想(最有效地)计算每个块的 MD5 值以及整个文件的 MD5。我完全理解如何根据hashlib reference docs 和其他关于有效calculating MD5 values for large files 的stackoverflow 问题计算MD5。
我看到的最简单的解决方案是为每个块创建一个 hashlib.md5() 实例,为总数据创建一个实例。然而,这意味着有效地对完整数据运行两次 md5 算法并进行大量消化。在处理第一个块之后,我可以通过在第一个 hashlib.md5() 值上调用 copy() 来稍微优化它,但在那之后我看不到如何更有效地做到这一点。
有没有更好的方法,我可以基本上将每个块的 MD5 值组合成使用 Python 的完整文件的总 MD5?
【问题讨论】:
-
您是否分析过您的代码以查看这是否真的是某种瓶颈?我假设磁盘访问成本将使 md5sum 成本相形见绌
-
它会的,很多事情会让成本相形见绌。但是磁盘成本不是我可以改变的,而 MD5 可以。在做和不做 MD5 之间,我们确实看到了区别。如果有办法对此进行优化,为什么不考虑呢?
-
呸,公平点...但是没有办法组合 md5 以获得整个语料库返回的相同 md5
-
认为可能是这种情况,但我对 MD5 算法本身不够熟悉,无法知道是否有某种方法可以散列组件。哦,好吧。