Zlib decompressobj与解压缩性能

时间:2019-05-10 08:46:09

标签: python zlib

使用zlib decompressobj函数而不是解压缩是否会降低性能?

我问是因为我使用的python应用使用zlib解压缩文件。在过去的几个月中,一切工作正常,但是,一种类型的文件超出了服务器的内存限制,这使得解压缩功能失败。根据文档,我可以切换到decompressobj函数,该函数可在块上工作并可以处理大文件。事实是,我对decompress函数的用法更多,并且正在考虑将它们全部更改为decompressobj。可以,还是会使代码变慢?

1 个答案:

答案 0 :(得分:2)

首先,premature optimization is the root of all evil.仅在效率 效率低下,在实践中并且您确定了资源消耗(例如通过分析)后才对其进行优化,而且效果足够大,值得付出努力并增加复杂性(=额外的维护负担)。


zlib.decompresszlib.decompressobj.decompress的实现都在zlibmodule.c中,分别是zlib_decompress_implzlib_Decompress_decompress_impl

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

因此,使用原始解压缩方式没有区别。

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

  • 因此,用decompress替换decompressobj是否值得(或根本没有效果)将取决于内存,处理器或I / O是否是每个特定的瓶颈情况(如果是内存则为正,如果是处理器则为负,如果是I / O,则不起作用)。 (因此请转到第一段进行指导。)