我必须提取数百个tar.bz文件,每个文件的大小为5GB。因此尝试了以下代码:
import tarfile
from multiprocessing import Pool
files = glob.glob('D:\\*.tar.bz') ##All my files are in D
for f in files:
tar = tarfile.open (f, 'r:bz2')
pool = Pool(processes=5)
pool.map(tar.extractall('E:\\') ###I want to extract them in E
tar.close()
但是代码有类型错误:TypeError:map()至少接受3个参数(给定2个)
我该如何解决?还有其他加速提取的想法吗?
您需要更改pool.map(tar.extractall('E:\\')
为类似pool.map(tar.extractall(),"list_of_all_files")
请注意,map()
第2个参数首先是一个函数,第二个是一个iterable,并将Apply函数应用于iterable的每个项目并返回结果列表。
编辑:您需要将一个TarInfo
对象传递到另一个过程中:
def test_multiproc():
files = glob.glob('D:\\*.tar.bz2')
pool = Pool(processes=5)
result = pool.map(read_files, files)
def read_files(name):
t = tarfile.open (name, 'r:bz2')
t.extractall('E:\\')
t.close()
>>>test_multiproc()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句