gpt4 book ai didi

python - Windows 和 Linux 中的 Hashlib

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:33 24 4
gpt4 key购买 nike

我正在用 Python 编写一个 p2p 应用程序,并使用 hashlib 模块来识别网络中内容相同但名称不同的文件。

问题是我使用 Python 2.7 测试了为 Windows (Vista) 中的文件执行散列的代码,它非常快(不到一秒,对于几千兆字节)。所以,在 Linux 中(Fedora 12,Python 2.6.2 和 Python 2.7.1 是我自己编译的,因为我还没有找到带有 yum 的 rpm)慢得多,小于 1gb 的文件将近一分钟。

问题是,为什么?我可以做些什么来提高 Linux 的性能吗?

散列的代码是

import hashlib
...

def crear_lista(directorio):

lista = open(archivo, "w")

for (root, dirs, files) in os.walk(directorio):
for f in files:
#archivo para hacerle el hash
h = open(os.path.join(root, f), "r")

#calcular el hash de los archivos
md5 = hashlib.md5()

while True:
trozo = h.read(md5.block_size)
if not trozo: break
md5.update(trozo)

#cada linea es el nombre de archivo y su hash
size = str(os.path.getsize(os.path.join(root, f)) / 1024)
digest = md5.hexdigest()

#primera linea: nombre del archivo
#segunda: tamaño en KBs
#tercera: hash
lines = f + "\n" + size + "\n" + digest + "\n"
lista.write(lines)

del md5
h.close()

lista.close()

我将 r 更改为 rbrU 但结果是一样的

最佳答案

您正在以 64 字节 (hashlib.md5().block_size) block 读取文件并对其进行哈希处理。

您应该在 256KB(262144 字节)到 4MB(4194304 字节)的范围内使用更大的读取值,然后对其进行哈希处理;这个digup程序以 1MB block 读取,即:

block_size = 1048576 # 1MB
while True:
trozo = h.read(block_size)
if not trozo: break
md5.update(trozo)

关于python - Windows 和 Linux 中的 Hashlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4418042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com