0
我正在從Windows計算機上的網絡驅動器(NAS上的CIFS共享)執行一個沉重的glob操作。 (CPython,v2.7.6)python性能的後續調用os.listdir
文件夾「項目」包含1到15 840個文件和1232個文件夾。
(我usinf它調用os.listdir()遞歸glob模塊)
以下腳本加載在空閒和我做「運行模塊」多次
import timeit
import glob
globPath = u'Z:/Project/*/*/*/*'
def native_glob():
glob.glob(globPath))
print timeit.timeit(native_glob, number=1)
第一呼叫:
>>> 64.4641505602
下一個和所有其他呼叫(+ - 0.5秒):
>>> 2.07747177124
(該命令返回4125個文件)
第一呼叫高度取決於網絡電荷時,它是在一個範圍從100秒至40秒,但隨後的調用總是圍繞每個2秒。
它看起來像是有一個這樣的緩存機制。
- 任何人都可以重現此行爲嗎?
- 這是隻與Windows有關還是來自python?
所以我想我無法控制緩存發生的方式。奇蹟般的高效,但緩存不一致,我不知道什麼時候會被釋放。我正在比較一個自定義的緩存,但它總是比較慢(顯然,如果我將基於字典的緩存與os本機緩存系統進行比較) – 2014-09-02 14:39:09
您無法緩存未先檢索的內容,並且緩存需要稀疏資源:內存,所以操作系統可以並且將會清理一些東西,讓更多的東西變得更迫切需要緩存一段時間。此外,您需要避免緩存太多或太長,以免您獲取過時的信息。 – 2014-09-02 14:40:16
是的,我將修改時間存儲在緩存層次結構中,以便我可以相應地更新它。 – 2014-09-02 14:46:44