首先安装模块:
pip install cachetools

Cachetools提供了五个主要功能:
cached用作装饰器。当我们调用缓存时,它会将函数缓存起来以备后用。默认情况下,这将执行一个简单的缓存。
语法结构:
- @cached(cache = {})
- def some_fun():
- pass
示例代码: 【使用时间模块来查看模块的效率】
- from cachetools import cached
- import time
-
-
- # without cached
- def fib(n):
- return n if n < 2 else fib(n - 1) + fib(n - 2)
-
-
- s = time.time()
- print(fib(36))
- print("Time Taken:", time.time() - s)
-
- # Now using cached
- s = time.time()
-
-
- # Use this decorator to enable caching
- @cached(cache={})
- def fib(n):
- return n if n < 2 else fib(n - 1) + fib(n - 2)
-
-
- print(fib(36))
- print("Time Taken(cached): ", time.time() - s)
运行结果:

LRUCache在缓存装饰器内部使用。LRU 缓存是指“最近最少使用”的缓存。它接受一个参数“maxsize”,该参数说明应如何缓存最近的函数。
语法结构:
- @cached(cache= LRUCache(maxsize= 3))
- def some_fun():
- pass
示例代码:
- from cachetools import cached, LRUCache
- import time
-
-
- # cache using LRUCache
- @cached(cache=LRUCache(maxsize=3))
- def my_fun(n):
- # This delay resembles some task
- s = time.time()
- time.sleep(n)
- print("\nTime Taken: ", time.time() - s)
- return f"I am executed: {n}"
-
-
- # Takes 3 seconds
- print(my_fun(3))
-
- # Takes no time
- print(my_fun(3))
-
- # Takes 2 seconds
- print(my_fun(2))
-
- # Takes 1 second
- print(my_fun(1))
-
- # Takes 4 seconds
- print(my_fun(4))
-
- # Takes no time
- print(my_fun(1))
-
- # Takes 3 seconds because maxsize = 3
- # and the 3 recent used functions had 1,
- # 2 and 4.
- print(my_fun(3))
运行结果:

注意: LRUCache也可以从标准 Python 包 functools 中调用
- from functools import lru_cache
- @lru_cache
- def myfunc():
- pass
TTLCache或“Time To Live”缓存是 cachetools 模块中包含的第三个功能。它有两个参数——“maxsize”和“TTL”。“maxsize”的使用与 LRUCache 相同,但这里的“TTL”值表示缓存应存储多长时间。该值以秒为单位。
语法结构:
- @cached(cache= TTLCache(maxsize= 33, ttl = 600))
- def some_fun():
- pass
示例代码:
- from cachetools import cached, TTLCache
- import time
-
-
- # Here recent 32 functions
- # will we stored for 1 minutes
- @cached(cache=TTLCache(maxsize=32, ttl=25))
- def my_fun(n):
- # This delay resembles some task
- s = time.time()
- time.sleep(n)
- print("\nTime Taken: ", time.time() - s)
- return f"I am executed: {n}"
-
-
- print(my_fun(3))
- print(my_fun(3))
- print("*" * 100)
-
- time.sleep(24)
- print(my_fun(3))
- print("*" * 100)
-
- time.sleep(26)
- print(my_fun(3))
运行结果:

LFUCache或“Least Frequently Used”缓存是另一种类型的缓存技术,用于检索项目被调用的频率。它会在必要时丢弃最不常调用的项目以腾出空间。它采用一个参数——“maxsize”,与 LRUCache 中的相同。
语法结构:
- @cached(cache= LFUCache(maxsize= 33))
- def some_fun():
- pass
示例代码:
- from cachetools import cached, LFUCache
- import time
-
-
- # Here if a particular item is not called
- # within 5 successive call of the function,
- # it will be discarded
- @cached(cache=LFUCache(maxsize=5))
- def my_fun(n):
- # This delay resembles some task
- s = time.time()
- time.sleep(n)
- print("\nTime Taken: ", time.time() - s)
- return f"I am executed: {n}"
-
-
- print(my_fun(3))
- print(my_fun(3))
- print(my_fun(2))
- print(my_fun(4))
- print(my_fun(1))
- print(my_fun(1))
- print(my_fun(3))
- print(my_fun(3))
- print(my_fun(4))
运行结果:

RRCache或“Random Replacement”缓存是另一种缓存技术,它随机选择缓存中的项目并在必要时丢弃它们以释放空间。它采用一个参数——“maxsize”,与 LRUCache 中的相同。它还有一个参数选择,默认设置为“random.choice”。
语法结构:
- @cached(cache= RRCache(maxsize= 33))
- def some_fun():
- pass
示例代码:
- from cachetools import cached, RRCache
- import time
-
-
- # Here if a particular item is not called
- # within 5 successive call of the function,
- # it will be discarded
- @cached(cache=RRCache(maxsize=5))
- def my_fun(n):
- # This delay resembles some task
- s = time.time()
- time.sleep(n)
- print("\nTime Taken: ", time.time() - s)
- return f"I am executed: {n}"
-
-
- print(my_fun(3))
- print(my_fun(3))
- print(my_fun(2))
- print(my_fun(4))
- print(my_fun(1))
- print(my_fun(1))
- print(my_fun(3))
- print(my_fun(2))
- print(my_fun(3))
运行结果:
