我编写了一个python函数,它从用gzip压缩的文本文件中读取。 我用gzip模块读取文件,这里是代码:
def apertura(file):
diz_pagerank = {}
with gzip.open(file) as pagerank_file:
pagerank_csv = csv.reader(pagerank_file, delimiter='\t')
for pagerank in pagerank_csv:
diz_pagerank[pagerank[0]] = float(pagerank[1])
return diz_pagerank
我读过gzip模块与zcat相比真的很慢。我已经测量了执行的时间:
时间:
真实1m31.112s
用户1m29.420s
sys 0m1.684s
我已经重写代码以使用子进程模块,直接使用zcat打开文件:
def apertura(file):
diz_pagerank = {}
process = subprocess.Popen(['zcat', file], stdout=subprocess.PIPE)
for pagerank in iter(process.stdout.readline, ''):
pagerank = pagerank.strip().split('\t')
diz_pagerank[pagerank[0]] = float(pagerank[1])
return diz_pagerank
但现在功能要慢得多!
这是时间的结果:
真正的5m26.536s
用户2m19.976s
sys 3m11.904s
怎么可能?我哪里做错了?加速事情的其他提示?