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执行这些操作文件更慢一个(连续). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |