我正在开发一个遍历目录的应用程序,所以我已经下载了最新的Python 2.7 scandir模块。我走路时得到一些非常奇怪的不一致的速度结果,我不太明白发生了什么。由于我的程序在继续之前必须对每个目录执行很多操作,因此我希望尽可能提高效率。
为了测试模块,我做了一个非常简单的脚本:
import os
src_dir = r'/'
for root, dirs, files in os.walk(src_dir):
print root
连续几次运行后,扫描我的整个根驱动器大约需要1:30。然后我改为代码:
import scandir as sd
src_dir = r'/'
for root, dirs, files in sd.walk(src_dir):
print root
我跑了几次,平均每次约0:50。
我的系统上有一些目录,其中包含大约10,000个符号链接,每个目录都会使每个目录的脚本保持几秒钟,这为整个过程增加了大约15秒。
现在我改回os.Walk,并指向包含所有符号链接的文件夹的父目录,第一次运行大约需要20-25秒,如果再次运行,则只需2每次后续运行的整个过程的秒数。 scandir也会发生同样的行为。
所有我能想到的是文件系统级别上存在某种缓存,只要我走同一棵树,并且树不是太大,就可以在后续执行时访问它。
我可以在大约15秒内在root上一直运行一个find命令,所以看起来Python的步行开始真的慢下来了。关于这里可能会发生什么的任何想法?