zcat stdout pipe vs gzip module

时间:2016-05-18 10:57:08

标签: python pipe gzip

我编写了一个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

怎么可能?我哪里做错了?加速事情的其他提示?

0 个答案:

没有答案