обработка `общих` мемоизированных python функций - PullRequest
0 голосов
/ 27 мая 2020

Для приложения 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 в приложении, содержащем все указанные выше модули?

1 Ответ

0 голосов
/ 01 июня 2020

@functools.lru_cache не делает никаких магов c. Это декоратор функции, то есть он принимает аннотированную функцию (здесь: memoized_f) в качестве входных данных и определяет новую функцию. По сути, это memoized_f = lru_cache(memoized_f, maxsize=2, ...) (см. здесь )

Таким образом, ваш вопрос сводится к тому, имеет ли (функция в) модуль, импортированный двумя другими модулями, разделяет состояние, на что ответ да, есть общий кеш. Это потому, что каждый модуль импортируется только один раз.

См., Например, официальную документацию

...