walk()效率不一致

时间:2017-07-03 19:32:49

标签: python os.walk scandir

我正在开发一个遍历目录的应用程序,所以我已经下载了最新的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的步行开始真的慢下来了。关于这里可能会发生什么的任何想法?

0 个答案:

没有答案