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


# Generate some compressible data
data = (str(math.pi).encode() * 10_000)

# Compression functions
def compress_with_zlib(data):
    return zlib.compress(data)

def compress_with_gzip(data):
    return gzip.compress(data)

def compress_with_bz2(data):
    return bz2.compress(data)

def compress_with_lzma(data):
    return lzma.compress(data)

def compress_with_zstd(data):
    return zstd.compress(data)

# Benchmarking function
def benchmark(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}")

上述代码对同一样本数据集应用了包括 zlibgzipbz2lzmazstd 在内的不同算法,并记录了压缩率和时间成本。

我的执行结果为:

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 将其纳入标准库是理所当然的。

为什么这很重要

在 Python 3.14 之前,当内置模块效率不足时,我们不得不安装第三方 zstandard 包来使用这个高性能算法。

现在,由于 compression.zstd 将被纳入标准库,我们可以直接获得对这个广泛采用的压缩标准的支持,并且减少对依赖项管理的压力。

结论

Python 正在不断演进以满足现代性能和易用性需求。而 Zstandard 在 3.14 版本中的加入便是绝佳例证。

无论您是在构建数据管道、缓存系统,还是任何涉及压缩数据的场景,compression.zstd 都将成为您乐于使用的全新利器。

感谢阅读。❤️ 希望您享受使用 Python 编程的乐趣!

你也许感兴趣的:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注