【发布时间】:2010-12-04 16:48:00
【问题描述】:
我需要通过网络传输大文件,并且需要每小时为它们创建校验和。所以生成校验和的速度对我来说至关重要。
不知何故,我无法让 zlib.crc32 和 zlib.adler32 在 Windows XP Pro 64 位机器上处理大于 4GB 的文件。我怀疑我在这里达到了 32 位限制?使用 hashlib.md5 我可以得到一个结果,但问题是速度。为 4.8GB 文件生成一个 md5 大约需要 5 分钟。任务管理器显示进程只使用一个内核。
我的问题是:
- 有没有办法让 crc 在大文件上工作?我更喜欢使用 crc 而不是 md5
- 如果没有,有没有办法加快 md5.hexdigest()/md5.digest?或者在这种情况下任何hashlib hexdigest/digest?也许将其拆分为多线程进程?我该怎么做?
PS:我正在开发类似于“资产管理”系统的东西,有点像 svn,但资产由大型压缩图像文件组成。这些文件有微小的增量更改。检测更改和错误检测需要散列/校验和。
【问题讨论】:
-
你有什么理由不能只使用 rsync 吗?
-
您是否需要检查它们的完整性(使用适当的算法,这是实际的问题)只是因为您通过网络传输文件?如果是这样,这已经在帧的硬件级别和 Tcp 层中针对任何缺失部分进行了验证(我在这里假设一个 Tcp 连接)。对不起,如果这听起来很明显,但我宁愿问。
-
大家好,感谢您的回复。为什么我不能使用 rsync,因为这几乎就像一个传输大型压缩图像文件的资产管理系统。几个人在处理一些文件。这些文件有微小的增量更改需要检测。因此我正在尝试使用校验和/哈希。
标签: python multithreading md5 crc32 hashlib