91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python緩存技術實現過程詳解

發布時間:2020-09-15 19:04:14 來源:腳本之家 閱讀:137 作者:yaominghui 欄目:開發技術

一段非常簡單代碼

普通調用方式

def console1(a, b):
  print("進入函數")
  return (a, b)

print(console1(3, 'a'))
print(console1(2, 'b'))
print(console1(3.0, 'a'))

很簡單的一段代碼,傳入兩個參數。然后打印輸出。輸出結果

進入函數
(3, 'a')
進入函數
(2, 'b')
進入函數
(3.0, 'a')

使用某個裝飾器后

接下來我們引入functools模塊的lru_cache,python3自帶模塊。

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緩存技術了。

我們理解下什么是LRU

LRU (Least Recently Used) 是緩存置換策略中的一種常用的算法。當緩存隊列已滿時,新的元素加入隊列時,需要從現有隊列中移除一個元素,LRU 策略就是將最近最少被訪問的元素移除,從而騰出空間給新的元素。

python中的實現

python3中的functools模塊的lru_cache實現了這個功能,lru_cache裝飾器會記錄以往函數運行的結果,實現了備忘(memoization)功能,避免參數重復時反復調用,達到提高性能的作用,在遞歸函數中作用特別明顯。這是一項優化技術,它把耗時的函數的結果保存起來,避免傳入相同的參數時重復計算。

帶參數的lru_cache

使用方法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'))

同樣的可以用到爬蟲的去重操作上,避免網頁的重復請求。在后期存儲的時候做判斷即可。

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=["https://www.baidu.com","https://pypi.org/project/pylru/1.0.9/","https://www.baidu.com"]

if __name__ == '__main__':
  for i in urllist:
    print(get_html(i))

輸出

https://www.baidu.com
<Response [200]>
https://pypi.org/project/pylru/1.0.9/
<Response [200]>
<Response [200]>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乳山市| 凉山| 龙门县| 莎车县| 大厂| 得荣县| 伊川县| 饶阳县| 平凉市| 梅州市| 开原市| 蓬溪县| 海兴县| 建瓯市| 南充市| 连南| 抚松县| 石门县| 湖南省| 惠水县| 泾川县| 阿合奇县| 济阳县| 林州市| 崇阳县| 信阳市| 常宁市| 庐江县| 余姚市| 汾阳市| 伊吾县| 林周县| 新蔡县| 正定县| 丹寨县| 奉化市| 石景山区| 哈密市| 信阳市| 襄汾县| 平远县|