「Python實用秘技09」更好用的函數運算緩存
本文完整示例代碼及文件已上傳至我的
Github
倉庫//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
實現分佈式存儲等,你可以前往其官方倉庫查看詳細文檔說明://github.com/shaypal5/cachier
本期分享結束,咱們下回見~👋