本篇內(nèi)容介紹了“怎么理解Python標(biāo)準(zhǔn)庫(kù)Lru_cache”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
10年建站經(jīng)驗(yàn), 成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)客戶(hù)的見(jiàn)證與正確選擇。創(chuàng)新互聯(lián)建站提供完善的營(yíng)銷(xiāo)型網(wǎng)頁(yè)建站明細(xì)報(bào)價(jià)表。后期開(kāi)發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。
加速新境界:通過(guò)使用簡(jiǎn)單的緩存功能,僅需一行代碼即可加速你的函數(shù)。
不久前,我構(gòu)建了一個(gè)日常運(yùn)行的ETL管道,其通過(guò)從外部服務(wù)中抽取數(shù)據(jù)來(lái)豐富輸入數(shù)據(jù),然后將結(jié)果加載到數(shù)據(jù)庫(kù)中。
隨著輸入數(shù)據(jù)的增加,等待外部服務(wù)器的響應(yīng)變得非常費(fèi)時(shí),這使得ETL進(jìn)程越來(lái)越慢。經(jīng)過(guò)一番調(diào)查,我發(fā)現(xiàn)與總記錄數(shù)(~500k)相比,并沒(méi)有太多不同的輸入值(~500)。
因此,換句話(huà)說(shuō),使用相同的參數(shù)調(diào)用外部服務(wù)時(shí),每個(gè)參數(shù)大約要重復(fù)執(zhí)行1000次。
像這樣的情況是使用緩存的主要用例。緩存一個(gè)函數(shù)意味著無(wú)論何時(shí)首次計(jì)算函數(shù)的返回值,都會(huì)將其輸入和結(jié)果放在字典中。
對(duì)于每個(gè)后續(xù)函數(shù)調(diào)用,首先通過(guò)查看緩存來(lái)檢查結(jié)果是否已經(jīng)計(jì)算過(guò)。如果在緩存中找到了,那就很完美,不需要再次計(jì)算!如果沒(méi)有找到,就計(jì)算結(jié)果并將輸入和結(jié)果存儲(chǔ)在緩存中,以便下一個(gè)函數(shù)調(diào)用時(shí)查找到它。
Python標(biāo)準(zhǔn)庫(kù)附帶了許多鮮為人知但功能強(qiáng)大的軟件包。對(duì)于本示例,將使用functools中的lru_cache。(LRU代表“最近最少使用(Least Recently Used)”,正如字面意思,這明確意味著緩存將保留最近的輸入/結(jié)果對(duì)。)
從Fun(c)tools中導(dǎo)入lru_cache
把c放進(jìn)括號(hào)中有點(diǎn)像一個(gè)蹩腳的笑話(huà),因?yàn)檫@樣functools就變成了fun tools(有趣的工具),使用緩存當(dāng)然很有趣!
這里無(wú)需過(guò)多解釋。導(dǎo)入lru_cache并用它來(lái)裝飾一個(gè)函數(shù),該函數(shù)將生成斐波那契數(shù)。
裝飾函數(shù)意味著將該函數(shù)與緩存函數(shù)包裝在一起,隨后每當(dāng)調(diào)用fib_cache函數(shù)時(shí),都將調(diào)用緩存的函數(shù)。
比賽開(kāi)始
我們進(jìn)行了一個(gè)實(shí)驗(yàn),計(jì)算函數(shù)的緩存和未緩存版本從0到40計(jì)算所有斐波那契數(shù)所花費(fèi)的時(shí)間,并將結(jié)果放入各自的列表中。
獲勝者
對(duì)于較小的斐波那契數(shù),二者并沒(méi)有什么大的區(qū)別,但是一旦達(dá)到約30個(gè)樣本,緩存函數(shù)的效率增益就開(kāi)始累加。
我沒(méi)有耐心讓未緩存的版本運(yùn)行超過(guò)40個(gè)樣本,因?yàn)樗倪\(yùn)行時(shí)間是指數(shù)增長(zhǎng)的。而對(duì)于緩存的版本,它的運(yùn)行時(shí)間只是線(xiàn)性增量。
“怎么理解Python標(biāo)準(zhǔn)庫(kù)Lru_cache”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁(yè)標(biāo)題:怎么理解Python標(biāo)準(zhǔn)庫(kù)Lru_cache
文章URL:http://chinadenli.net/article34/gidjse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、響應(yīng)式網(wǎng)站、企業(yè)建站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、外貿(mào)建站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)