使用xxhash哈希大文件时如何避免内存耗尽?
处理大文件XXHash计算的内存问题
原代码的问题在于input_file.read()会一次性将整个文件加载到内存中,当文件体积超过系统可用内存时,就会触发内存耗尽、交换空间占满,最终被系统终止进程的问题。
正确的处理方式是分块读取文件,逐步更新哈希值,不需要一次性加载整个文件到内存:
import xxhash def get_hash(file, block_size=65536): # 初始化XXH3-64哈希对象 hash_obj = xxhash.xxh3_64() with open(file, 'rb') as input_file: # 循环分块读取文件 while chunk := input_file.read(block_size): # 用当前块更新哈希 hash_obj.update(chunk) # 返回十六进制格式的哈希结果 return hash_obj.hexdigest()
说明:
block_size参数可以根据实际情况调整,默认的65536字节(64KB)是兼顾内存占用和计算效率的通用值,也可以设置为1048576(1MB)之类的更大值。- 每次读取一块后立即更新哈希,处理完所有块后再生成最终摘要,全程只占用少量内存存储当前块和哈希对象。
内容的提问来源于stack exchange,提问作者equinoxe5
相关产品推荐
相关产品推荐

