「Python實用祕技09」更好用的函數運算緩存

本文完整示例代碼及文件已上傳至我的Github倉庫https://github.com/CNFeffery/PythonPracticalSkills

  這是我的系列文章「Python實用祕技」的第9期,本系列立足於筆者日常工作中使用Python積累的心得體會,每一期爲大家帶來一個幾分鐘內就可學會的簡單小技巧。

  作爲系列第9期,我們即將學習的是:在Python中實現簡單好用的函數運算緩存

  函數運算緩存,顧名思義就是我們可以針對指定的函數,讓其記住過往參數輸入和返回結果,使得後續接收到相同的參數時跳過函數運算,直接返回已緩存的結果值。

  很多朋友應該知道Python標準庫裏functools.lru_cache可以做函數運算緩存,但是它的功能實在是太簡陋了,像過期時間設置之類的功能都沒有。

  而我們可以使用第三方庫cachier來代替,它的基本使用方式非常簡單,使用pip install cachier完成安裝後,我們來看一個簡單的示例:

  這裏我們定義一個具有一定運算耗時的函數,利用cachier.cachier()裝飾,並利用參數stale_after設置緩存到期時間爲10秒:

import time
from cachier import cachier
from datetime import timedelta

@cachier(stale_after=timedelta(seconds=10))
def demo(x: int, y: int):
    
    time.sleep(2)
    
    return x * y

for i in range(10):
    print('-'*50)
    print(f'第{i+1}次執行')
    start = time.time()
    demo(1, 1)
    print(f'耗時{round(time.time() - start, 2)}秒')

    time.sleep(2)

  過程打印記錄如下:

  可以觀察到,我們的函數按照設定好的過期時間進行着緩存。除此之外,cachier還有很多其他實用特性,譬如基於mongodb實現分佈式存儲等,你可以前往其官方倉庫查看詳細文檔說明:https://github.com/shaypal5/cachier


  本期分享結束,咱們下回見~👋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章