gpt4 book ai didi

python - 如何使用python多处理优化压缩文件功能?

转载 作者:行者123 更新时间:2023-12-03 13:17:31 27 4
gpt4 key购买 nike

我有一个将多个文件压缩成一个 zip 文件的工作功能

targetzipfile = os.path.normpath(targetfolder) + '.zip' 
zipf = zipfile.ZipFile(targetzipfile,'w', zipfile.ZIP_DEFLATED, allowZip64=True)

for root, dirs, files in os.walk(targetfolder):
for f in files:
#use relative path zipfile.write(absfilename, archivename), the archive name is the name to be shown in the zip file
print "compressing: %s" % os.path.join(root,f)
zipf.write(os.path.join(root,f),os.path.relpath(os.path.join(root,f), os.path.dirname(os.path.normpath(targetfolder)))) #Note here maybe a problem, root/f must
zipf.close()

但是运行起来很慢,因为我有很多文件。所以我正在寻找一种方法来优化这个循环,在 python 中具有多处理能力,比如 OpenMP。

感谢您的任何建议。

最佳答案

我怀疑多处理在这里会有所帮助。

zipfile Python stdlib 中的模块不是线程安全的!!!

因此,我们将如何优化您的代码?

始终在执行优化之前和期间配置文件。

因为我不知道你的文件结构。我以python源代码为例。

$ time python singleprocess.py
python singleprocess.py 2.31s user 0.22s system 100% cpu 2.525 total

然后,让我们试试 Ubuntu 自带的 zip 命令( info-zip)。

您可以为 zip 命令指定压缩级别。 -1 表示最快的压缩速度(压缩较少),-9 表示最慢的压缩速度。默认压缩级别为 -6。
$ time zip python.zip Python-2.7.6 -r -q
zip python.zip Python-2.7.6 -r -q 2.02s user 0.11s system 99% cpu 2.130 total

$ time zip python.zip Python-2.7.6 -r -q -1
zip python.zip Python-2.7.6 -r -q -1 1.00s user 0.11s system 99% cpu 1.114 total

$ time zip python.zip Python-2.7.6 -r -q -9
zip python.zip Python-2.7.6 -r -q -9 4.92s user 0.11s system 99% cpu 5.034 total

你看,python的zlib模块的性能是非常有竞争力的。但是有一些专业的压缩工具可以让你更好地控制压缩策略。

您可以使用 python 中的子进程模块调用这些外部命令。

此外,当您使用上面的 python 代码压缩目录时,您会丢失目录及其子目录的元数据(权限位、上次访问时间、上次修改时间...)。

关于python - 如何使用python多处理优化压缩文件功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851957/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com