Python 3.x Python每定义一段时间清除lru_缓存

Python 3.x Python每定义一段时间清除lru_缓存,python-3.x,python-decorators,Python 3.x,Python Decorators,我对api进行了许多冗余调用,因此我决定使用lru缓存。但是,我还希望每隔一段时间清除缓存,以防给定输入的响应值发生变化。因此,作为一种解决方案,我创建了自己的decorator,以便在给定的时间内清除缓存,但现在我的函数api_call()似乎总是不返回任何值。这是我的密码: def缓存维护器(清除时间:int): """ 清除lru缓存清除时间秒的函数修饰符 :param clear_time:以秒为单位,清除缓存的频率(仅在调用时检查) """ def内部(func): def包装(*ar

我对api进行了许多冗余调用,因此我决定使用lru缓存。但是,我还希望每隔一段时间清除缓存,以防给定输入的响应值发生变化。因此,作为一种解决方案,我创建了自己的decorator,以便在给定的时间内清除缓存,但现在我的函数api_call()似乎总是不返回任何值。这是我的密码:

def缓存维护器(清除时间:int):
"""
清除lru缓存清除时间秒的函数修饰符
:param clear_time:以秒为单位,清除缓存的频率(仅在调用时检查)
"""
def内部(func):
def包装(*args,**kwargs):
如果hasattr(func,“下一步清除”):
如果time.time()>func.next\u清除:
函数cache_clear()
func.next\u clear=time.time()+清除时间
其他:
func.next\u clear=time.time()+清除时间
func(*args,**kwargs)
返回包装器
返回内部
@cache_maintainer(86400)#每1天清除一次缓存
@lru_缓存(最大大小=1000)
def api_调用(参数):
返回参数
打印(api_调用(“测试”))

我一辈子都搞不清楚我做错了什么

这个答案是使用python包缓存工具

要安装cachetools-
pip安装cachetools

from cachetools import TTLCache

cache = TTLCache(maxsize=5, ttl=100)
cache['dog'] = 'dog'
a = cache['dog'] # dog
... after 100 seconds...
cache['dog']
KeyError exception thrown

非常简单的错误,花了太长时间才弄清楚。正如Tim Peters提到的,
func()
被调用,但结果被丢弃(face palm)。我所需要做的就是在调用
func()。以下是修改后的正常工作代码:

def缓存维护器(清除时间:int):
"""
清除lru缓存清除时间秒的函数修饰符
:param clear_time:以秒为单位,清除缓存的频率(仅在调用时检查)
"""
def内部(func):
def包装(*args,**kwargs):
如果hasattr(func,“下一步清除”):
如果time.time()>func.next\u清除:
函数cache_clear()
func.next\u clear=time.time()+清除时间
其他:
func.next\u clear=time.time()+清除时间
返回函数(*args,**kwargs)
返回包装器
返回内部
@cache_maintainer(86400)#每1天清除一次缓存
@lru_缓存(最大大小=1000)
def api_调用(参数):
返回参数
打印(api_调用(“测试”))

请注意,
wrapper()
调用
func()
,但会将结果丢弃:它总是返回
None
。如果有人来这里,请查看此消息