我有多个.gz文件,总共加起来1TB。 如何利用Python 2.7并行解压缩这些文件? 循环文件需要花费太多时间。
我也试过这段代码:
Android
但是我收到以下错误:
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
谢谢!
答案 0 :(得分:0)
要使用with
构造,内部使用的对象必须具有__enter__
和__exit__
方法。该错误表明Pool
类(或实例)没有这些,因此您无法在with
语句中使用它。
试试这个(刚刚删除了with语句):
import glob, multiprocessing, shutil
filenames = [gz for gz in glob.glob('.' + '*.gz')]
def uncompress(path):
with gzip.open(path, 'rb') as src, open(path.rstrip('.gz'), 'wb') as dest:
shutil.copyfileobj(src, dest)
for _ in multiprocessing.Pool().imap_unordered(uncompress, filenames, chunksize=1):
pass
修改强>
我同意@dhke,除非所有(或大多数)gz文件在物理上相邻,对于不同位置(在使用多处理时更频繁地调用)的频繁磁盘读取将比通过执行这些操作文件更慢逐个文件(连续)。