意义重大!Python 3.14 新模块 Zstandard 压缩来了
Python 3.14 即将推出,其中包含许多突破性的变化,例如删除 GIL和引入模板字符串。
但有一个小的、实用的改进还没有引起足够的重视:将compression.zstd模块添加到标准库中。
这种对 Zstandard 压缩算法的内置支持可能不会引起关注,但对于处理大量数据、实时系统或高效存储管道的开发人员来说,这是一个有意义的升级。
本质上,Zstandard 是由Meta开发的一种快速压缩算法。它旨在提供速度和压缩率之间的完美平衡,使其成为实时压缩和大规模数据处理的热门选择。
它的主要优点如下:
高压缩比 压缩和解压缩速度更快 可调节压缩级别和流媒体支持
Python 3.14 的模块compression.zstd将提供简单的 API 来使用该算法压缩和解压缩二进制数据。
以下是在 Python 3.14.0rc1 下使用它的简单示例:
from compression import zstd
import math
data = str(math.pi).encode() * 20
compressed = zstd.compress(data)
ratio = len(compressed) / len(data)
print(f"Achieved compression ratio of {ratio:.4f}")
# Achieved compression ratio of 0.1000
与其他内置压缩模块的比较
zstd说起来容易做起来难,让我们做一个快速的基准测试,与 Python 3.14 下的其他内置压缩算法进行比较:
import time
import math
import zlib
import gzip
import bz2
import lzma
from compression import zstd
# 生成一些可压缩数据
data = (str(math.pi).encode() * 10_000)
# 压缩函数
defcompress_with_zlib(data):
return zlib.compress(data)
defcompress_with_gzip(data):
return gzip.compress(data)
defcompress_with_bz2(data):
return bz2.compress(data)
defcompress_with_lzma(data):
return lzma.compress(data)
defcompress_with_zstd(data):
return zstd.compress(data)
# 基准测试函数
defbenchmark(name, func, data):
start = time.perf_counter()
compressed = func(data)
end = time.perf_counter()
ratio = len(compressed) / len(data)
elapsed = (end - start) * 1000#covert seconds to milliseconds
return name, ratio, elapsed
results = []
results.append(benchmark("zlib", compress_with_zlib, data))
results.append(benchmark("gzip", compress_with_gzip, data))
results.append(benchmark("bz2", compress_with_bz2, data))
results.append(benchmark("lzma", compress_with_lzma, data))
results.append(benchmark("zstd", compress_with_zstd, data))
print(f"{'Algorithm':<8} | {'Ratio':<10} | {'Time (ms)':<10}")
print("-" * 35)
for name, ratio, time_ms in results:
print(f"{name:<8} | {ratio:<10.4f} | {time_ms:<10.2f}")
上述代码对同一个样本数据集分别应用了zlib、gzip、bz2、lzma和zstd等不同的算法,并记录了压缩率和时间开销。
我的执行结果是:
Algorithm | Ratio | Time (ms)
-----------------------------------
zlib | 0.0026 | 0.39
gzip | 0.0027 | 0.41
bz2 | 0.0005 | 17.03
lzma | 0.0010 | 20.64
zstd | 0.0003 | 0.14
这个结果胜过千言万语。Zstandard 提供了最小的文件大小和最快的压缩速度。Python 完全有理由将其纳入标准库。
为什么重要
zstandard在Python 3.14之前,当内置模块效率不够高时,我们必须安装第三方包才能使用这种高性能算法。
现在,由于compression.zstd将被纳入标准库,我们可以获得对这一广泛采用的压缩标准的开箱即用支持,并减少依赖管理的压力。
结论
Python 正在不断发展,以满足现代性能和可用性需求。3.14 版本中 Zstandard 的加入就是一个很好的例子。
无论您构建的是数据管道、缓存系统还是任何涉及压缩数据的东西,compression.zstd这都是您想要使用的新武器。
🏴☠️宝藏级🏴☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递