使用zlib decompressobj函数而不是解压缩是否会降低性能?
我问是因为我使用的python应用使用zlib解压缩文件。在过去的几个月中,一切工作正常,但是,一种类型的文件超出了服务器的内存限制,这使得解压缩功能失败。根据文档,我可以切换到decompressobj函数,该函数可在块上工作并可以处理大文件。事实是,我对decompress函数的用法更多,并且正在考虑将它们全部更改为decompressobj。可以,还是会使代码变慢?
答案 0 :(得分:2)
首先,premature optimization is the root of all evil.仅在效率 效率低下,在实践中并且您确定了资源消耗(例如通过分析)后才对其进行优化,而且效果足够大,值得付出努力并增加复杂性(=额外的维护负担)。
zlib.decompress
和zlib.decompressobj.decompress
的实现都在zlibmodule.c
中,分别是zlib_decompress_impl
和zlib_Decompress_decompress_impl
。
它们不共享代码,但是它们的代码几乎相同(如预期的那样),并委托给相同的zlib
C库函数。
因此,使用原始解压缩方式没有区别。
decompressobj
可能会有很小的开销,并带有额外的逻辑和重复的Python调用-但是,如果数据很大,则解压缩时间将使它相形见。
decompress
替换decompressobj
是否值得(或根本没有效果)将取决于内存,处理器或I / O是否是每个特定的瓶颈情况(如果是内存则为正,如果是处理器则为负,如果是I / O,则不起作用)。 (因此请转到第一段进行指导。)