【发布时间】:2017-12-30 03:50:26
【问题描述】:
我有一个带有方法/属性multiplier 的对象。这个方法在我的程序中被调用了很多次,所以我决定在它上面使用lru_cache()来提高执行速度。正如预期的那样,它要快得多:
以下代码显示了问题:
from functools import lru_cache
class MyClass(object):
def __init__(self):
self.current_contract = 201706
self.futures = {201706: {'multiplier': 1000},
201712: {'multiplier': 25}}
@property
@lru_cache()
def multiplier(self):
return self.futures[self.current_contract]['multiplier']
CF = MyClass()
assert CF.multiplier == 1000
CF.current_contract = 201712
assert CF.multiplier == 25
第二个 assert 失败,因为缓存值为 1000,因为 lru_cache() 不知道基础属性 current_contract 已更改。
有没有办法在 self.current_contract 更新时清除缓存?
谢谢!
【问题讨论】:
标签: python caching synchronization functools lru