python中的快取技術

2022-05-19 12:31:43 字數 2681 閱讀 8891

def console(a,b):

print('進入函式')

return (a,b)

print(console(3,'a'))

print(console(2,'b'))

print(console(3.0,'a'))

#輸出結果

進入函式

(3, 'a')

進入函式

(2, 'b')

進入函式

(3.0, 'a')

from functools import lru_cache

@lru_cache()

def console2(a, b):

print("進入函式")

return (a, b)

print(console2(3, 'a'))

print(console2(2, 'b'))

print(console2(3.0, 'a'))

#輸出結果

進入函式

(3, 'a')

進入函式

(2, 'b')

(3, 'a')

很明顯,輸出結果少了一行,這是為什麼呢?

lru (least recently used) 是快取置換策略中的一種常用的演算法。當快取佇列已滿時,新的元素加入佇列時,需要從現有佇列中移除乙個元素,lru 策略就是將最近最少被訪問的元素移除,從而騰出空間給新的元素。

python3中的functools模組的lru_cache實現了這個功能,

lru_cache裝飾器會記錄以往函式執行的結果,實現了備忘

(memoization)功能,避免引數重複時反覆呼叫,達到提高效能的作用,在遞迴函式中作用特別明顯。這是一項優化技術,它把耗時的函式的結果儲存起來,避免傳入相同的引數時重複計算。

使用方法lru_cache(maxsize=128, typed=false)

maxsize可以快取最多個此函式的呼叫結果,從而提高程式執行的效率,特別適合於耗時的函式。

引數maxsize為最多快取的次數,如果為none,則無限制,設定為2的n次冪時,效能最佳;

如果 typed=true,則不同引數型別的呼叫將分別快取,例如 f(3) 和 f(3.0),預設false

來一段綜合**:

from functools import lru_cache

def console1(a, b):

print("進入函式")

return (a, b)

@lru_cache()

def console2(a, b):

print("進入函式")

return (a, b)

@lru_cache(maxsize=256, typed=true)

def console3(a, b):

''':param a:

:param b:

:return:

'''print("進入函式")

return (a, b)

print(console1(3, 'a'))

print(console1(2, 'b'))

print(console1(3.0, 'a'))

print("*" * 40)

print(console2(3, 'a'))

print(console2(2, 'b'))

print(console2(3.0, 'a'))

print("*" * 40)

print(console3(3, 'a'))

print(console3(2, 'b'))

print(console3(3.0, 'a'))

#輸出結果為

進入函式

(3, 'a')

進入函式

(2, 'b')

進入函式

(3.0, 'a')

****************************************

進入函式

(3, 'a')

進入函式

(2, 'b')

(3, 'a')

****************************************

進入函式

(3, 'a')

進入函式

(2, 'b')

進入函式

(3.0, 'a')

同樣的可以用到爬蟲的去重操作上,避免網頁的重複請求。

在後期儲存的時候做判斷即可。

from functools import lru_cache

from requests_html import htmlsession

session=htmlsession()

@lru_cache()

def get_html(url):

req=session.get(url)

print(url)

return req

urllist=["","",""]

if __name__ == '__main__':

for i in urllist:

print(get_html(i))

輸出結果:

Python快取技術

普通呼叫方式 def console1 a,b print 進入函式 return a,b print console1 3,a print console1 2,b print console1 3.0,a 複製 很簡單的一段 傳入兩個引數。然後列印輸出。輸出結果 進入函式 3,a 進入函式 2,...

Hibernate中的快取技術

根據我學習的框架的經驗,在shh整合框架中,hibernate是最難學習的了。hibernate中有許多要點,還得掌握一下啊,像懶載入lazy 級聯cascade 事物控制 還有快取和二級快取哦。首先我們先來了解一下快取 所謂快取就是介於應用程式和物理資料來源之間的資料。能夠降低應用程式對物理資料訪...

分析PHP中的快取技術

關於php的快取技術我個人的定義是可以分成3個類別1 快取模組這這個是在伺服器上做的快取設定,比如zend公司的cache產品等,主要原理是通過對php 檔案的一次編譯儲存在記憶體中,通過減少i o的操作來加快訪問速度,不在本文討論範圍之列2 html方式或許你說php生成html的方式不在本文討論...