使用python进行大文件压缩给出了一个很好的示例,说明了如何使用例如bz2纯粹在Python中压缩非常大的文件集(或大文件)。
Pigz说,利用并行压缩可以做得更好。就我所知(和Google搜索)而言,我找不到在纯Python代码中等效的Python。
是否有并行的Python实现pigz或等效的实现?
mgzip能够实现这一点
使用块索引 GZIP 文件格式来并行压缩和解压缩。该实现使用'FEXTRA'来记录压缩成员的索引,这是在官方GZIP文件格式规范版本4.3中定义的,因此它与正常的GZIP实现完全兼容。
import mgzip
num_cpus = 0 # will use all available CPUs
with open('original_file.txt', 'rb') as original, mgzip.open(
'gzipped_file.txt.gz', 'wb', thread=num_cpus, blocksize=2 * 10 ** 8
) as fw:
fw.write(original.read())
Run Code Online (Sandbox Code Playgroud)
我能够在 72 个 CPU 的服务器上将压缩速度从 45 分钟加快到 5 分钟
我不了解pigz用于Python的临时接口,但是如果您真的需要它,编写它可能不会那么困难。Python的zlib模块允许压缩字节的任意块,并且在pigz手册页描述了系统的并行压缩和已经输出格式。
如果您确实需要并行压缩,则应该可以实现pigz等效的zlib用于压缩包装的块multiprocessing.dummy.Pool.imap(multiprocessing.dummy是multiprocessingAPI 的线程支持版本,因此您不会招致与工作人员之间来回发送块的大量IPC成本)并行压缩。由于zlib是在CPU绑定工作期间释放GIL的少数几个内置模块之一,因此您实际上可能会从基于线程的并行中受益。
请注意,在实践中,当压缩级别没有达到那么高的水平时,I / O的成本通常与实际zlib压缩相似(在数量级左右)。如果您的数据源实际上无法以比压缩更快的速度送入线程,那么并行化将不会带来太大收益。
| 归档时间: |
|
| 查看次数: |
2473 次 |
| 最近记录: |