处理 "普通 "备忘录化的python函数。

问题描述 投票:0回答:1

对于一个包括以下模块的python应用。

commons.py

    @lru_cache(maxsize=2)
    def memoized_f(x):
        ...

pipeline_a.py

from commons import memoized_f

x = memoized_f(10)
y = memoized_f(11)

pipeline_b.py

from commons import memoized_f

x = memoized_f(20)
y = memoized_f(21)
  1. python是否存储一个 memoized_f 缓存 pipeline_* 所以在上面的例子中,会有两个缓存,总共为 memoized_f或者
  2. 因为缓存是为 memoized_f的缓存,这里只存储了 memoized_f 在包含上述所有模块的应用程序中?
python caching code-reuse
1个回答
0
投票

@functools.lru_cache 不做任何魔术。它是一个函数装饰器,意思是它把注释的函数(这里是......)作为输入,并定义一个新的函数。memoized_f)作为输入,并定义一个新函数。本质上它做了 memoized_f = lru_cache(memoized_f, maxsize=2, ...) (见 此处)

所以你的问题归结为:一个(模块中的)函数是否被其他两个模块导入时共享状态,答案是 是的,有一个共同的缓存。 这是因为每个模块只导入一次。

参见例如 官方文档

© www.soinside.com 2019 - 2024. All rights reserved.