Я использую встроенный в Python 3 декоратор functools.lru_cache
, чтобы запомнить некоторые дорогостоящие функции. Я хотел бы запомнить как можно больше вызовов, не используя слишком много памяти, поскольку кеширование слишком большого количества значений вызывает перегрузку.
Есть ли предпочтительный метод или библиотека для выполнения этого в Python?
Например, этот вопрос привел меня к библиотеке Go для кэширование LRU с учетом системной памяти. Что-то подобное для Python было бы идеально.
Примечание: я не могу просто оценить объем памяти, используемый для каждого значения, и соответствующим образом установить maxsize
, так как несколько процессов будут вызывать декорированную функцию параллельно; решение должно фактически динамически проверять, сколько памяти свободно.
lru_cache
? Самый простой способ — просто проверить использование памяти в декораторе. Это наверняка добавит некоторые накладные расходы, но я не думаю, что в этом приложении это будет существенно. - person Will   schedule 05.05.2014import functools
и просто введите имя модуляfunctools
. Работает для любого поиска источника практически любого модуля Python (конечно, кроме расширений C). - person Lukas Graf   schedule 05.05.2014-____-
Спасибо! - person Will   schedule 05.05.2014functools.lru_cache
написал Рэймонд Хеттингер. Он опубликовал несколько различных (LRU) рецептов кэширования/мемоизации, возможно, в них можно найти что-то полезное или хотя бы вдохновляющее ;-) - person Lukas Graf   schedule 05.05.2014:)
- person Will   schedule 05.05.2014