【发布时间】:2012-04-12 19:58:52
【问题描述】:
我有一个 Python 脚本,它递归地遍历指定目录,并对找到的每个文件进行校验和。然后它会写入一个日志文件,其中列出了所有文件路径及其 md5 校验和。
因此,对于 50,000 个 15 MB 的文件,这需要很长时间。但是,我的计算机可用的资源比它实际使用的要多得多。如何调整我的方法以使脚本使用更多资源以更快地执行?
例如,我可以将我的文件列表分成三份并为每份运行一个线程,从而给我 3 倍的运行时间吗?
我对线程不太满意,我希望有人不介意为我的情况做个例子。
这是我的顺序 md5 循环的代码:
for (root, dirs, files) in os.walk(root_path):
for filename in files:
file_path = root + "/" + filename
md5_pairs.append([file_path, md5file(file_path, 128)])
提前感谢您的帮助!
【问题讨论】:
-
最简单的方法是启动你的 python 脚本的单独实例,其中每个实例都从 root_path 获得一个子树
-
在尝试任何优化之前,最好先调查一下瓶颈在哪里。例如,如果 MD5 比从磁盘读取文件花费的时间要少得多,就速度而言不要期望太多。
-
这很好,我对简单读取和校验和进行了基准测试,校验和只增加了大约 10% 的运行时间。我们的光纤连接 SAN 读取速度为 8 Gb/s。我想我可以让这些文件更快地读入,不是吗?要读取总共 7 GB 的 600 个文件,需要 88 秒。
-
感谢大家的帮助! Stack Overflow 太棒了!!!
标签: python multithreading md5 checksum