Zlib decompressobj 与解压缩性能

Zlib decompressobj vs decompress performance

使用 zlib decompressobj 函数而不是解压缩是否有任何性能下降?

我问这个问题是因为我使用的 python 应用程序使用 zlib 解压缩文件。在过去的几个月里,一切都运行良好,但是,一种类型的文件增长超过了服务器内存限制,导致解压缩功能失败。根据文档,我可以切换到 decompressobj 函数,该函数适用于块并且可以处理大文件。问题是我对 decompress 函数有更多的使用,我正在考虑将它们全部更改为 decompressobj。可以吗还是可能会使代码变慢?

首先,premature optimization is the root of all evil. 只优化一次 效率太低,在实践中, 你确定了资源消耗大(例如通过分析),效果大到值得付出努力并增加复杂性(=额外的维护负担)。


zlib.decompresszlib.decompressobj.decompress 实现都相应地在 zlibmodule.c , as zlib_decompress_impl and zlib_Decompress_decompress_impl 中。

他们不共享代码,但他们的代码几乎相同(正如预期的那样)并且委托给相同的 zlib C 库函数。

所以使用哪一个没有区别raw-decompressing-wise。

使用额外的逻辑和重复的 Python 调用 decompressobj 可能会有很小的开销 -- 但如果数据很大,解压缩时间就会相形见绌。

  • 因此,用 decompressobj 替换 decompress 是否值得(或者是否会产生任何影响)将取决于内存、处理器还是 I/O每个特定情况下的瓶颈(如果内存有积极影响,如果处理器有负面影响,如果 I/O 则没有影响)。 (因此转到第一段以获得指导。)