由于内存问题,使用 Python 读取多部分 7z 文件失败

问题描述 投票:0回答:1

我正在使用循环来使用此代码读取多存档 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
命令进行了很好的测试)。该循环非常简单,仅使用库函数,因此我无法使其变得更轻。

编辑:更准确地说:

  • 对于某些档案,循环完全失败
  • 对于其他一些人来说,循环正在工作,我可以通过填充内存并观察循环失败来推断这是内存问题(代码和存档相同)。填充内存的方式是保留足够的空间(假设 1 GB)。

所以我的猜测是两个库

multivolumefile
py7zr
之一在内部消耗了大量内存。

有没有一种方法可以减少内存占用,以便我们能够确保读取多部分存档始终成功,而与存档的大小或存档内的文件的大小无关?

python 7zip py7zr
1个回答
0
投票

经过多次测试,这看起来可能是一个错误,错误报告已提交:https://github.com/miurahr/py7zr/issues/575

© www.soinside.com 2019 - 2024. All rights reserved.