Zlib decompressobj 与解压缩性能
Zlib decompressobj vs decompress performance
使用 zlib decompressobj 函数而不是解压缩是否有任何性能下降?
我问这个问题是因为我使用的 python 应用程序使用 zlib 解压缩文件。在过去的几个月里,一切都运行良好,但是,一种类型的文件增长超过了服务器内存限制,导致解压缩功能失败。根据文档,我可以切换到 decompressobj 函数,该函数适用于块并且可以处理大文件。问题是我对 decompress 函数有更多的使用,我正在考虑将它们全部更改为 decompressobj。可以吗还是可能会使代码变慢?
首先,premature optimization is the root of all evil. 只优化一次 效率太低,在实践中, 你确定了资源消耗大(例如通过分析),效果大到值得付出努力并增加复杂性(=额外的维护负担)。
zlib.decompress
和 zlib.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 则没有影响)。 (因此转到第一段以获得指导。)
使用 zlib decompressobj 函数而不是解压缩是否有任何性能下降?
我问这个问题是因为我使用的 python 应用程序使用 zlib 解压缩文件。在过去的几个月里,一切都运行良好,但是,一种类型的文件增长超过了服务器内存限制,导致解压缩功能失败。根据文档,我可以切换到 decompressobj 函数,该函数适用于块并且可以处理大文件。问题是我对 decompress 函数有更多的使用,我正在考虑将它们全部更改为 decompressobj。可以吗还是可能会使代码变慢?
首先,premature optimization is the root of all evil. 只优化一次 效率太低,在实践中, 你确定了资源消耗大(例如通过分析),效果大到值得付出努力并增加复杂性(=额外的维护负担)。
zlib.decompress
和 zlib.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 则没有影响)。 (因此转到第一段以获得指导。)