我正在使用循环来使用此代码读取多存档 7z 文件。
import py7zr
import multivolumefile
zip_path = f"{ARCHIVE_PATH}/test.7z"
with multivolumefile.open(zip_path, mode='rb') as multizip_handler:
with py7zr.SevenZipFile(multizip_handler, 'r', password=PASSWORD, filters=filters) as zip_handler:
for fname, fcontent in zip_handler.read(targets=None).items():
pass
存档相对较大(73 个部分,总大小 700 Mb)。我注意到内存占用相当高(即使没有在内存中存储任何可变内容,如
fname
或 fcontent
)。这个循环正在工作,但如果我故意用 head -c 7G /dev/zero | tail
之类的命令填充内存,循环会给我一个 CRC 错误(而实际上存档是使用 7z
命令进行了很好的测试)。该循环非常简单,仅使用库函数,因此我无法使其变得更轻。
编辑:更准确地说:
所以我的猜测是两个库
multivolumefile
或py7zr
之一在内部消耗了大量内存。
有没有一种方法可以减少内存占用,以便我们能够确保读取多部分存档始终成功,而与存档的大小或存档内的文件的大小无关?
经过多次测试,这看起来可能是一个错误,错误报告已提交:https://github.com/miurahr/py7zr/issues/575