【发布时间】: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 中以更快的方式解压缩?是否有其他库或也许另一种方法可以克服这种缓慢?
【问题讨论】: