欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python緩存技術(shù)實現(xiàn)過程詳解

 更新時間:2019年09月25日 08:47:29   投稿:yaominghui  
這篇文章主要介紹了Python緩存技術(shù)實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一段非常簡單代碼

普通調(diào)用方式

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

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

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

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

使用某個裝飾器后

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

from functools import lru_cache
@lru_cache()
def console2(a, b):
  print("進入函數(shù)")
  return (a, b)
print(console2(3, 'a'))
print(console2(2, 'b'))
print(console2(3.0, 'a'))

ほら、驚喜來了。

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

我們發(fā)現(xiàn),少了一次進入函數(shù)的打印,這是怎么回事呢?這就是接下來要說的LRU緩存技術(shù)了。

我們理解下什么是LRU

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

python中的實現(xiàn)

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

帶參數(shù)的lru_cache

使用方法lru_cache(maxsize=128, typed=False)maxsize可以緩存最多個此函數(shù)的調(diào)用結(jié)果,從而提高程序執(zhí)行的效率,特別適合于耗時的函數(shù)。參數(shù)maxsize為最多緩存的次數(shù),如果為None,則無限制,設(shè)置為2的n次冪時,性能最佳;如果 typed=True,則不同參數(shù)類型的調(diào)用將分別緩存,例如 f(3) 和 f(3.0),默認False來一段綜合代碼:

from functools import lru_cache

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


@lru_cache()
def console2(a, b):
  print("進入函數(shù)")
  return (a, b)


@lru_cache(maxsize=256, typed=True)
def console3(a, b):
  '''

  :param a:
  :param b:
  :return:
  '''
  print("進入函數(shù)")
  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'))

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

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]>

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • TensorFlow和Numpy矩陣操作中axis理解及axis=-1的解釋

    TensorFlow和Numpy矩陣操作中axis理解及axis=-1的解釋

    在調(diào)用numpy庫中的concatenate()時,有遇到axis=-1/1/0的情況,下面這篇文章主要給大家介紹了關(guān)于TensorFlow和Numpy矩陣操作中axis理解及axis=-1解釋的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 幫你快速上手Jenkins并實現(xiàn)自動化部署

    幫你快速上手Jenkins并實現(xiàn)自動化部署

    在未學習Jenkins之前,只是對Jenkins有一個比較模糊的理解,即Jenkins是一個自動化構(gòu)建項目發(fā)布的工具,可以實現(xiàn)代碼->github或者gitlab庫->jenkins自動部署->訪問的整體的過程,而無需人為重新打包,今天就帶大家詳細了解一下,幫你快速上手Jenkins,需要的朋友可以參考下
    2021-06-06
  • python3讓print輸出不換行的方法

    python3讓print輸出不換行的方法

    在本篇內(nèi)容里小編給大家整理的是關(guān)于python3讓print輸出不換行的方法,有需要的朋友們可以學習參考下。
    2020-08-08
  • python神經(jīng)網(wǎng)絡(luò)TensorFlow簡介常用基本操作教程

    python神經(jīng)網(wǎng)絡(luò)TensorFlow簡介常用基本操作教程

    這篇文章主要介紹了python神經(jīng)網(wǎng)絡(luò)入門TensorFlow簡介常用基本操作教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Python+Selenium自動化實現(xiàn)分頁(pagination)處理

    Python+Selenium自動化實現(xiàn)分頁(pagination)處理

    這篇文章主要為大家詳細介紹了Python+Selenium自動化實現(xiàn)分頁pagination處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • pytorch如何自定義數(shù)據(jù)集

    pytorch如何自定義數(shù)據(jù)集

    這篇文章主要介紹了pytorch自定義數(shù)據(jù)集,在識別手寫數(shù)字的例子中,數(shù)據(jù)集是直接下載的,但如果我們自己收集了一些數(shù)據(jù),存在電腦文件夾里,我們該如何把這些數(shù)據(jù)變?yōu)榭梢栽赑yTorch框架下進行神經(jīng)網(wǎng)絡(luò)訓練的數(shù)據(jù)集呢,即如何自定義數(shù)據(jù)集呢,需要的朋友可以參考下
    2024-01-01
  • Python實現(xiàn)批量修改xml文件的腳本

    Python實現(xiàn)批量修改xml文件的腳本

    這篇文章主要為大家詳細介紹了如何通過Python實現(xiàn)批量修改xml文件功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-11-11
  • 使用PYTHON創(chuàng)建XML文檔

    使用PYTHON創(chuàng)建XML文檔

    今天想使用python來創(chuàng)建一個xml文件。找了下資料,發(fā)現(xiàn)資料不是很多,基本上都是使用python來解析xml文件的
    2012-03-03
  • Python+Pygame實現(xiàn)經(jīng)典魂斗羅游戲

    Python+Pygame實現(xiàn)經(jīng)典魂斗羅游戲

    《魂斗羅》(Contra)是由Konami于1987年推出的一系列卷軸射擊類單機游戲。本文將利用Python中的Pygame庫實現(xiàn)這一經(jīng)典游戲,感興趣的可以了解一下
    2022-05-05
  • python中幾個常用函數(shù)的正確用法-lambda/filter/map/reduce

    python中幾個常用函數(shù)的正確用法-lambda/filter/map/reduce

    這篇文章主要介紹了python中幾個常用函數(shù)的正確用法,這幾個常用函數(shù)包括lambda、filter、map、reduce,本文將圍繞這幾個常用函數(shù)展開內(nèi)容,需要的朋友可以參考一下
    2021-11-11

最新評論