想象一下以下简单的脚本:
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文件。但如何提高速度?硬盘似乎是瓶颈。我看到可以使用缓冲读取 - 使用open(file,mode,buffer)语法。但我不太确定它是否适用于我的情况(使用生成器)。此外,我没有找到gzip.GzipFile调用的任何缓冲参数。从代码中看,它基于某些缓冲类,但我没有看到任何进一步的文档。我有一个(疯狂的?)想法,创建一个显式缓存,并用它替换打开方法 - 这样它就会按8MB等更大块读取文件,然后按行拆分。至于写入,我想创建要写入的行列表,收集它们(例如5000行),然后转储到文件中。我试图重复发明轮子吗?我对脚本当前的性能不满意,因此我尽可能地尝试加速它。更新:我大约有4-5个不同的并行工作人员在运行。他们都执行读取和写入操作。因此,我想要实现一些缓冲以便定期以大块方式转储数据。谢谢!