繁体   English   中英

如何跨进程清除lru_cache - Python2.7

[英]How to clear lru_cache across different processes - Python2.7

我正在处理一个 Django 项目(版本 1.11 - Python 2.7),我需要创建一个新端点来清除使用 lru_cache 装饰器缓存的所有方法。

在这个项目中,我有几个像这样的缓存函数:

try:
    from functools import lru_cache
except ImportError:
    from backports.functools_lru_cache import lru_cache

...

@lru_cache(maxsize=None)
def my_function():
    pass

当后端启动时,使用Twisted 库创建了十个不同的进程。
我想知道是否可以清除每个进程的 lru 缓存以及如何清除。

我知道可以使用cache_clear()方法清除 lru_cache 并且有几种策略可以做到这一点,但我认为这是一个单线程场景。

是否可以跨多个进程执行相同的操作?

lru_cache 的lru_cache文档说“缓存是线程安全的,因此包装的 function 可以在多个线程中使用。”: https://docs.python.org/3/library/functools.html#functools.lru_cache

不过,我不确定backports.functools_lru_cache是否与来自 Python 3 的真实缓存有任何不同。

虽然你链接到的关于使用垃圾收集器列出装饰器对象的想法很有趣,但看起来很费力,并不构成“几种策略”。

除非您列出这些对象,否则我看不出您将如何以任何其他方式获得对象列表。 我建议您创建自己的装饰器来包装lru_cache并在其中构建一个函数列表。 然后您可以提供自己的cache_clear function 来迭代该列表。

问题未解决?试试以下方法:

如何跨进程清除lru_cache - Python2.7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM