加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python – 并行解压缩.gz文件

发布时间:2020-12-20 13:10:28 所属栏目:Python 来源:网络整理
导读:我有多个.gz文件,总共加起来1TB. 如何利用 Python 2.7并行解压缩这些文件? 循环文件需要花费太多时间. 我也试过这段代码: filenames = [gz for gz in glob.glob(filesFolder + '*.gz')]def uncompress(path): with gzip.open(path,'rb') as src,open(path.
我有多个.gz文件,总共加起来1TB.
如何利用 Python 2.7并行解压缩这些文件?
循环文件需要花费太多时间.

我也试过这段代码:

filenames = [gz for gz in glob.glob(filesFolder + '*.gz')]

def uncompress(path):
    with gzip.open(path,'rb') as src,open(path.rstrip('.gz'),'wb') as dest:
        shutil.copyfileobj(src,dest)

with multiprocessing.Pool() as pool:
    for _ in pool.imap_unordered(uncompress,filenames,chunksize=1):
        pass

但是我收到以下错误:

with multiprocessing.Pool() as pool:

AttributeError: __exit__

谢谢!

解决方法

要与构造一起使用,内部使用的对象必须具有__enter__和__exit__方法.该错误表明Pool类(或实例)没有这些,因此您无法在with语句中使用它.
试试这个(刚刚删除了with语句):

import glob,multiprocessing,shutil

filenames = [gz for gz in glob.glob('.' + '*.gz')]

def uncompress(path):
    with gzip.open(path,dest)


for _ in multiprocessing.Pool().imap_unordered(uncompress,chunksize=1):
    pass

编辑

我同意@dhke,除非所有(或大多数)gz文件在物理上相邻,对于不同位置(在使用多处理时更频繁地调用)的频繁磁盘读取将比通过文件1执行这些操作文件更慢一个(连续).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读