成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python緩存函數(shù) python 文件緩存

python 緩存

詳解:

創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。

一.

1.int 類型的緩存

[-5, 256]的整型,只要Python解釋器一運(yùn)行,這些數(shù)值就加載到了內(nèi)存

2.free_list:float、list、touple、dict等都是這種方式

當(dāng)一個(gè)對(duì)象引用計(jì)數(shù)為0時(shí),按理說就應(yīng)該被垃圾回收了,但是Python不是這么做的,而是將對(duì)象放入到free_list鏈表里面。這樣,以后再去創(chuàng)建該對(duì)象時(shí),不會(huì)重新開辟內(nèi)存,而是直接使用free_list里面的

Python性能提升神器!lru_cache的介紹和講解

我們經(jīng)常談?wù)摰木彺嬉辉~,更多的類似于將硬盤中的數(shù)據(jù)存放到內(nèi)存中以至于提高讀取速度,比如常說的redis,就經(jīng)常用來做數(shù)據(jù)的緩存。 Python的緩存(lru_cache)是一種裝飾在被執(zhí)行的函數(shù)上,將其執(zhí)行的結(jié)果緩存起來,當(dāng)下次請(qǐng)求的時(shí)候,如果請(qǐng)求該函數(shù)的傳參未變則直接返回緩存起來的結(jié)果而不再執(zhí)行函數(shù)的一種緩存裝飾器。

那它和redis的區(qū)別在哪?有什么優(yōu)勢(shì)?怎么使用? 下面為你講解

1.現(xiàn)在我們先不使用緩存來寫一個(gè)求兩數(shù)之和的函數(shù),并調(diào)用執(zhí)行它兩次:

執(zhí)行結(jié)果

可以看到 test 被執(zhí)行了兩次,現(xiàn)在我們加上緩存再進(jìn)行執(zhí)行:

執(zhí)行結(jié)果

可以看到 test 函數(shù)只被執(zhí)行了一次,第二次的調(diào)用直接輸出了結(jié)果,使用了緩存起來的值。

2.當(dāng)我們使用遞歸求斐波拉契數(shù)列 (斐波那契數(shù)列指的是這樣一個(gè)數(shù)列:0,1,1,2,3,5,8,它從第3項(xiàng)開始,每一項(xiàng)都等于前兩項(xiàng)之和) 的時(shí)候,緩存對(duì)性能的提升就尤其明顯了:

不使用緩存求第40項(xiàng)的斐波拉契數(shù)列

執(zhí)行時(shí)間

使用緩存求第40項(xiàng)的斐波拉契數(shù)列:

執(zhí)行時(shí)間

兩個(gè)差距是非常明顯的,因?yàn)椴皇褂镁彺鏁r(shí),相當(dāng)于要重復(fù)執(zhí)行了很多的函數(shù),而使用了 lru_cache 則把之前執(zhí)行的函數(shù)結(jié)果已經(jīng)緩存了起來,就不需要再次執(zhí)行了。

查看lru_cache源碼會(huì)發(fā)現(xiàn)它可以傳遞兩個(gè)參數(shù): maxsize 、 typed :

代表被lru_cache裝飾的方法最大可緩存的結(jié)果數(shù)量 (被裝飾方法傳參不同一樣,則結(jié)果不一樣;如果傳參一樣則為同一個(gè)結(jié)果) , 如果不指定傳參則默認(rèn)值為128,表示最多緩存128個(gè)返回結(jié)果,當(dāng)達(dá)到了128個(gè)時(shí),有新的結(jié)果要保存時(shí),則會(huì)刪除最舊的那個(gè)結(jié)果。如果maxsize傳入為None則表示可以緩存無限個(gè)結(jié)果;

默認(rèn)為false,代表不區(qū)分?jǐn)?shù)據(jù)類型,如果設(shè)置為True,則會(huì)區(qū)分傳參類型進(jìn)行緩存,官方是這樣描述的:

但在python3.9.8版本下進(jìn)行測(cè)試,typed為false時(shí),按照官方的測(cè)試方法測(cè)試得到的還是會(huì)被當(dāng)成不同的結(jié)果處理,這個(gè)時(shí)候typed為false還是為true都會(huì)區(qū)別緩存,這與官方文檔的描述存在差異:

執(zhí)行結(jié)果

但如果是多參數(shù)的情況下,則會(huì)被當(dāng)成一個(gè)結(jié)果:

執(zhí)行結(jié)果

這個(gè)時(shí)候設(shè)置typed為true時(shí),則會(huì)區(qū)別緩存:

執(zhí)行結(jié)果

當(dāng)傳參個(gè)數(shù)大于1時(shí),才符合官方的說法,不清楚是不是官方舉例有誤

當(dāng)傳遞的參數(shù)是dict、list等的可變參數(shù)時(shí),lru_cache是不支持的,會(huì)報(bào)錯(cuò):

報(bào)錯(cuò)結(jié)果

緩存 緩存位置 是否支持可變參數(shù) 是否支持分布式 是否支持過期時(shí)間設(shè)置 支持的數(shù)據(jù)結(jié)構(gòu) 需單獨(dú)安裝 redis 緩存在redis管理的內(nèi)存中 是 是 是 支持5種數(shù)據(jù)結(jié)構(gòu) 是 lru_cache 緩存在應(yīng)用進(jìn)程的內(nèi)存中,應(yīng)用被關(guān)閉則被清空 否 否 否 字典(參數(shù)為:key,結(jié)果為:value) 否

經(jīng)過上面的分析,lru_cache 功能相對(duì)于redis來說要簡(jiǎn)單許多,但使用起來更加方便,適用于小型的單體應(yīng)用。如果涉及的緩存的數(shù)據(jù)種類比較多并且想更好的管理緩存、或者需要緩存數(shù)據(jù)有過期時(shí)間(類似登錄驗(yàn)證的token)等,使用redis是優(yōu)于lru_cache的。

python3_原生 LRU 緩存

原生 LRU 緩存(最低 Python 版本為 3.2)

目前,幾乎所有層面上的軟件和硬件中都需要緩存。Python 3 將 LRU(最近最少使用算法)緩存作為一個(gè)名為「lru_cache」的裝飾器,使得對(duì)緩存的使用非常簡(jiǎn)單。

下面是一個(gè)簡(jiǎn)單的斐波那契函數(shù),我們知道使用緩存將有助于該函數(shù)的計(jì)算,因?yàn)樗鼤?huì)通過遞歸多次執(zhí)行相同的工作。

現(xiàn)在,我們可以使用「lru_cache」來優(yōu)化它(這種優(yōu)化技術(shù)被稱為「memoization」)。通過這種優(yōu)化,我們將執(zhí)行時(shí)間從幾十秒降低到了幾秒。

網(wǎng)站標(biāo)題:python緩存函數(shù) python 文件緩存
網(wǎng)站鏈接:http://jinyejixie.com/article34/dosdgse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、Google網(wǎng)站建設(shè)、定制開發(fā)、電子商務(wù)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
罗定市| 丹阳市| 钟祥市| 诏安县| 甘德县| 惠安县| 韶关市| 宁明县| 稷山县| 稷山县| 安国市| 朝阳市| 镇原县| 濮阳县| 巴彦县| 剑川县| 封开县| 绥化市| 左云县| 永寿县| 淮滨县| 花莲县| 吉安市| 敦煌市| 明水县| 项城市| 通海县| 喀什市| 宁武县| 新宁县| 余庆县| 拉萨市| 无极县| 云阳县| 兴海县| 曲周县| 精河县| 和静县| 延长县| 天柱县| 昌吉市|