后续调用os.listdir的python性能

时间:2014-09-02 13:56:01

标签: python windows caching

我正在从Windows计算机上对网络驱动器(NAS上的CIFS共享)执行重型glob操作。 (CPython,v2.7.6)

文件夹" Project"包含1到15个840个文件和1232个文件夹。

(我用的是递归调用os.listdir()的glob模块)

以下脚本在IDLE中加载,我正在执行"运行模块"多次

import timeit
import glob

globPath = u'Z:/Project/*/*/*/*'

def native_glob():
    glob.glob(globPath))

print timeit.timeit(native_glob, number=1)

第一次致电:

>>> 64.4641505602

下一个和所有其他电话(+ - .5秒):

>>> 2.07747177124

(该命令返回4125个文件)

第一次通话高度依赖于网络充电,它在100秒到40秒的范围内,但随后的呼叫总是大约2秒。

看起来这背后有一个缓存机制。

  • 有人可以重现这种行为吗?
  • 这只与windows有关还是来自python?

1 个答案:

答案 0 :(得分:1)

Python不对os.listdir()次调用进行任何缓存,这完全取决于Windows。

任何网络目录列表在缓存之前都会很慢,远程网络共享驱动器上的文件夹列表也不例外。