真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python函數(shù)緩存,python清除緩存的語句

python 緩存

詳解:

站在用戶的角度思考問題,與客戶深入溝通,找到丘北網(wǎng)站設計與丘北網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設計、成都網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋丘北地區(qū)。

一.

1.int 類型的緩存

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

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

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

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

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

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

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

執(zhí)行結果

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

執(zhí)行結果

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

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

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

執(zhí)行時間

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

執(zhí)行時間

兩個差距是非常明顯的,因為不使用緩存時,相當于要重復執(zhí)行了很多的函數(shù),而使用了 lru_cache 則把之前執(zhí)行的函數(shù)結果已經(jīng)緩存了起來,就不需要再次執(zhí)行了。

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

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

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

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

執(zhí)行結果

但如果是多參數(shù)的情況下,則會被當成一個結果:

執(zhí)行結果

這個時候設置typed為true時,則會區(qū)別緩存:

執(zhí)行結果

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

當傳遞的參數(shù)是dict、list等的可變參數(shù)時,lru_cache是不支持的,會報錯:

報錯結果

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

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

python 緩存記憶化 @lru_cache()

使用裝飾器lru_cache加速函數(shù)計算

lru是一種緩存淘汰算法

(least recently used)即最近最少使用淘汰算法

不用lru_cache

使用lru_cache

lru_cache的定義如下,

第一個參數(shù)maxsize控制最大緩存數(shù)量,

第二個參數(shù)為True則嚴格檢查被裝飾函數(shù)的參數(shù)類型

python3_原生 LRU 緩存

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

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

下面是一個簡單的斐波那契函數(shù),我們知道使用緩存將有助于該函數(shù)的計算,因為它會通過遞歸多次執(zhí)行相同的工作。

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


網(wǎng)站欄目:python函數(shù)緩存,python清除緩存的語句
網(wǎng)頁路徑:http://weahome.cn/article/hohdeg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部