- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下下面的简单脚本:
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/
我基本上想完全按照 gzip.GzipFile 的文档中的内容进行操作: Calling a GzipFile object’s close() method does not close fileo
想象一下下面的简单脚本: def reader(): for line in open('logfile.log'): # do some stuff here like sp
我将非常感谢您的帮助。我从我的代码的这一部分中收到一条错误消息,如下所述,我想用它来通过 affymetrix 微阵列分析(原始数据链接是 https://www.ncbi.nlm.nih.gov/s
我需要用 Python 处理一个 .gz 文件。 我将文件名传递到我的 Python 脚本中: infile = sys.argv[1] with gzip.open(infile, 'rb') as
我想阅读gzip并更新内容。 但是,我收到错误 'AttributeError: 'GzipFile' object has no attribute 'extrastart''. import gz
在 Python 2.7 (Pandas 0.22.0) 中,将 Pandas 数据帧保存到内存中的压缩 csv 工作方式如下: from io import BytesIO import gzip
这就是我正在做的 sudo gem install rails ERROR: While executing gem ... (Zlib::GzipFile::Error) unexpect
我正在将内容写入内存中的二进制流,以便将内容上传到 S3,而不将其存储在本地文件中(我的内存比磁盘空间多)。以下代码有效,但 mypy mvce.py失败 mvce.py:6: error: Argu
我使用 Bottle 来接收压缩后的请求正文。当请求的大小很小时,一切都很好。但是,如果请求正文的大小稍大(例如,>= 20kb),则会抛出 IOError。 以下是读取并解压请求体的代码: @pos
我正在使用 Python 研究 Stack Overflow API。我正在尝试解码 API 提供的压缩响应。 import urllib, gzip url = urllib.urlopen('ht
我正在开发 Sencha touch 2 应用程序。我一直在关注“Styling the user interface of a Sencha Touch application”关于 secha t
我正在尝试使用以下 Ruby 代码解压缩文件。 File.open("file_compressed.gz") do |compressed| File.open("file_decomp","w
我在运行时收到奇怪的 bundle 程序错误 bundle pack 使用 bundle 器0.9.12 有任何想法吗? (有关更好的格式化代码,请参见pastie:http://pastie.org
我是一名优秀的程序员,十分优秀!