我在 python 中有一些带有 lru_cache 缓存的函数,例如
@lru_cache(maxsize=None)
def my_function():
...
虽然我可以单独清除缓存,例如my_function.cache_clear()
有没有办法一次性清除每个函数的缓存? [我在想也许有一种方法可以返回内存中加载的所有函数名称,然后循环它们以清除每个函数的缓存]。
我特别希望将其实现作为后备的一部分,以应对机器上 90% 的内存被使用的情况。
也许有一种方法可以返回所有函数
名称加载到内存中,然后循环它们以清除缓存
从每个
是的,这也是可能的:
import functools
import gc
gc.collect()
wrappers = [
a for a in gc.get_objects()
if isinstance(a, functools._lru_cache_wrapper)]
for wrapper in wrappers:
wrapper.cache_clear()
我特别希望将其作为后备方案的一部分来实现
比如说我的机器上 90% 的内存都被使用的情况。
这是您在正常情况下可能不会使用的代码,但对于调试很有用。
在我的特殊情况下,我想清除一些matplotlib 中的悬空文件句柄(为了专注于我自己的松散文件句柄),因此不可能使用 Alex Hall 的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)