gpt4 book ai didi

python - GzipFile 中的缓冲

转载 作者:行者123 更新时间:2023-12-05 07:59:05 25 4
gpt4 key购买 nike

想象一下下面的简单脚本:

def reader():
for line in open('logfile.log'):
# do some stuff here like splitting the line or filtering etc.
yield some_new_line

def writer(stream):
with gzip.GzipFile('some_output_file.gz', 'w') as fh:
for _s in stream:
fh.write(_s+'\n')

stream = reader()
writer(stream)

非常简单 - 使用生成器读取行并将一些结果写入 gzip 文件。

但是如何加速呢? HDD似乎是一个瓶颈。我看到我可以使用缓冲区大小进行读取 - 使用 open(file, mode, buffer) 语法。但我不太确定它是否适用于我的情况(使用生成器)。

此外,我没有找到 gzip.GzipFile 调用的任何缓冲参数。从代码来看,它基于一些缓冲类,但我没有看到任何进一步的文档。

我有一个(疯狂的?)想法来创建一个显式缓存并用它替换 open 方法 - 这样它将以更大的 block 读取文件,比如 8MB,然后按行执行拆分。至于写入,我想创建一个要写入的行列表,收集它们(比如 5000 行),然后转储到文件中。

我是在重新发明轮子吗?我对脚本目前的性能不满意,所以我正在尝试尽可能加快它的速度。

更新。我有大约 4-5 个不同的并行工作人员在运行。他们都执行读取和写入。所以我猜 HDD 正在从一个扇区跳到另一个扇区,这就是为什么我想实现一些缓冲以定期大块转储数据的原因。

谢谢!

最佳答案

我可以建议更紧凑的代码:

def reader():
for line in open('logfile.log'):
# do some stuff here like splitting the line or filtering etc.
yield some_new_line

def writer(stream):
with gzip.GzipFile('some_output_file.gz', 'w') as fh:
fh.writelines(stream)

writer(reader())

但是,并没有实际的加速。 Python 将管理流,但如果您不能为完整文件写入腾出内存,则加速不会很大。

gzip 压缩是最慢的一步。下面的函数只会给你 ~3% 的加速(忽略生成器的部分)。

def writer():
f = open('logfile.log').read()
gzip.GzipFile('some_output_file.gz', 'w').write(f)
writer()

因此,如果您需要 gzip,您将无能为力。

关于python - GzipFile 中的缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23078422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com