【问题标题】:Fast zip decryption in pythonpython中的快速zip解密
【发布时间】:2020-05-21 17:11:58
【问题描述】:

我有一个使用zipfile 处理压缩文件的程序。它适用于iterator,因为未压缩的文件比2GB 大,它可能会成为内存问题。

with zipfile.Zipfile(BytesIO(my_file)) as myzip:
    for file_inside in myzip.namelist():
        with myzip.open(file_inside) as file:
            # Process here
            # for loop ....

然后我注意到这个过程处理我的文件非常慢。我可以理解这可能需要一些时间,但至少它应该使用我的机器资源:假设 python 进程应该 100% 使用它所在的核心。

既然没有,我就开始研究可能的根本原因。我不是压缩方面的专家,所以首先考虑基本的事情:

  • 资源似乎不是问题,即使我的编码方法不会使用它,也有足够的 RAM 可用。
  • CPU 使用率不高,即使是一个内核也没有。
  • 压缩后打开的文件大约是80MB,因此磁盘读取也不应该是一个减慢问题。

这让我想到瓶颈可能在于最不可见的参数:RAM 带宽。但是我不知道如何衡量。

然后在软件方面,我在zipfile docs上找到了:

解密速度非常慢,因为它是在原生 Python 而不是 C 中实现的。

我猜如果它使用的是本机 Python,它甚至没有使用 OpenGL 加速,所以另一个慢点。我也很好奇这种方法的工作原理,同样是因为 CPU 使用率低。

所以我的问题当然是,我怎样才能以类似的方式工作(在 RAM 中没有完整的解压缩文件),但在 Python 中以更快的方式解压缩?是否有其他库或也许另一种方法可以克服这种缓慢?

【问题讨论】:

    标签: python zip unzip


    【解决方案1】:

    有这个库供 python 处理压缩文件而无需内存。

    引用自文档:

    Buzon - ZipFly

    ZipFly 是一个基于 zipfile.py 的 zip 压缩包生成器。它是由 Buzon.io 创建的,用于生成非常大的 ZIP 档案,以便立即发送给客户,或者用于编写大型 ZIP 档案而不会造成内存膨胀。

    从未使用过,但可以提供帮助。

    【讨论】:

      【解决方案2】:

      我做了一些研究,发现如下:

      你可以“pip install czipfile”,更多信息在https://pypi.org/project/czipfile/

      另一种解决方案是使用“Cython”,python 的变体 -https://www.reddit.com/r/Python/comments/cksvp/whats_a_python_zip_library_with_fast_decryption/

      或者您可以外包给 7-Zip,如下所述:Faster alternative to Python's zipfile module?

      【讨论】:

      • 有一个 Python 3 的 github 端口:github.com/ziyuang/czipfile
      • 嗯,很有趣,我找不到对它的单一引用。但是我无法安装它。它失败了,因为尝试读取README 文件而不是README.md,并且作者在repo 中没有允许的问题。
      猜你喜欢
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      相关资源
      最近更新 更多