python3_原生 LRU 缓存

2019-05-21  本文已影响0人  古佛青灯度流年

原生 LRU 缓存(最低 Python 版本为 3.2)

目前,几乎所有层面上的软件和硬件中都需要缓存。Python 3 将 LRU(最近最少使用算法)缓存作为一个名为「lru_cache」的装饰器,使得对缓存的使用非常简单。

下面是一个简单的斐波那契函数,我们知道使用缓存将有助于该函数的计算,因为它会通过递归多次执行相同的工作。

import time
def fib(number: int) -> int:
 if number == 0: return 0
 if number == 1: return 1
 return fib(number-1) + fib(number-2)
start = time.time()
fib(40)
print(f'Duration: {time.time() - start}s')
# Duration: 30.684099674224854s

现在,我们可以使用「lru_cache」来优化它(这种优化技术被称为「memoization」)。通过这种优化,我们将执行时间从几十秒降低到了几秒。

from functools import lru_cache
@lru_cache(maxsize=512)
def fib_memoization(number: int) -> int:
 if number == 0: return 0
 if number == 1: return 1
 return fib_memoization(number-1) + fib_memoization(number-2)
start = time.time()
fib_memoization(40)
print(f'Duration: {time.time() - start}s')
# Duration: 6.866455078125e-05s
上一篇下一篇

猜你喜欢

热点阅读