【发布时间】:2017-09-19 12:47:11
【问题描述】:
我正在使用 pythons bz2 模块生成(并压缩)一个大型 jsonl 文件(bzip2 压缩 17GB)。
但是,当我后来尝试使用 pbzip2 解压它时,它似乎只使用 一个 CPU-core 进行解压,这很慢。
当我使用 pbzip2 压缩它时,它可以利用多个核心进行解压缩。有没有办法在python中以pbzip2兼容的格式压缩?
import bz2,sys
from Queue import Empty
#...
compressor = bz2.BZ2Compressor(9)
f = open(path, 'a')
try:
while 1:
m = queue.get(True, 1*60)
f.write(compressor.compress(m+"\n"))
except Empty, e:
pass
except Exception as e:
traceback.print_exc()
finally:
sys.stderr.write("flushing")
f.write(compressor.flush())
f.close()
【问题讨论】:
-
从我读到的并行磁盘 I/O 是bad idea。话虽这么说this answer may be relevant 这个问题。
-
@JamesDraper 磁盘 I/O 不会成为限制因素,尽管 ... bzip 计算速度很慢
-
@worenga 请注意,如果您可能使用顶级数字,那么 jsonl 是一种危险的格式,因为它们很容易被截断。 Json-seq 通过强制出错来解决这个问题。
-
你使用
BZ2Compressor而不是BZ2File有什么原因吗? -
@o11c BZ2File 不支持模式'a'。
标签: python python-2.7 multiprocessing bzip2 bzip