如何在python@functools.lru cach上使用cache_clear()

2024-05-16 11:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

The documentation状态:

The decorator also provides a cache_clear() function for clearing or invalidating the cache.

它没有提供任何关于如何使用cache_clear()的示例或指导

我有两个问题:

  • 如何从不同的函数运行cache_clear()
  • 如果我在被缓存的函数中有条件地放置一个cache_clear()调用,它会被执行吗?

Tags: orthe函数cachefor状态documentationfunction
1条回答
网友
1楼 · 发布于 2024-05-16 11:06:47

除了缓存,lru_cachedecorator还添加了新的函数,到修饰函数-cache_infocache_clear。下面是一个简单的例子,应该解释它们是如何工作的:

>>> @lru_cache(5)
... def foo():
...     print('Executing foo...')
... 
>>> foo()
Executing foo...
>>> foo()
>>> foo.cache_info()
CacheInfo(hits=1, misses=1, maxsize=5, currsize=1)
>>> foo.cache_clear()
>>> foo()
Executing foo...

回答你的问题:

If I put a cache_clear() call conditionally inside the function that is being cached, will it ever get executed?

如果结果尚未缓存,则函数将执行,并根据您的条件执行cache_clear。不过,我不会使用这样的解决方案-一个好的做法是在缓存对象之外使其失效,否则在最坏的情况下根本不会导致失效,在最好的情况下不会导致代码不可读。

How can I run cache_clear() from a different function?

只需导入缓存的函数并对其调用cache_clear

from x import foo

def bar():
    foo.cache_clear()

相关问题 更多 >