Python Cachetools может элементы имеют разные ttl? - PullRequest
0 голосов
/ 21 ноября 2018

Я использую @cachetools.func.ttl_cache(maxsize=3, ttl=3600, timer=time.time, typed=False) для кэширования различных фреймов данных.Оборачиваемая функция не создает саму DF, но при наличии аргумента вызывает нужную функцию.

В зависимости от аргумента DF может занять много времени или быстро построить, учитывая, что я хочу изменить элемент ttl (время жизни).Таким образом, пункт 1 может иметь ttl = 3600, а элемент 2 ttl = 10800.

Поддерживается ли эта функциональность?используя глобальную переменную или любым другим способом? документы

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Will, скорее всего, правильно, но на всякий случай, если вы захотите попробовать, я думаю, что подкласс TTLCache и перезапись одной функции должны работать:

from cachetools import Cache, TTLCache

cache = TTLItemCache(maxsize=2, ttl=100)
# ttl=100
cache.__setitem__('key1', 'val1')
# ttl=200
cache.__setitem__('key2', 'val2', ttl=200)

class TTLItemCache(TTLCache):
    def __setitem__(self, key, value, cache_setitem=Cache.__setitem__, ttl=None):
        super(TTLItemCache, self).__setitem__(key, value)
        if ttl:
            link = self._TTLCache__links.get(key, None)
            if link:
                link.expire += ttl - self.ttl
0 голосов
/ 27 января 2019

Нет.

Однако вы можете создавать свои собственные пользовательские кэши для использования с cachetools.Вы можете проверить реализацию ttlcache в ttl.py для примера.Это довольно просто.

К сожалению, сам ttlcache на самом деле не разработан таким образом, чтобы его можно было удобно разделить на подклассы и переопределить логику, определяющую, когда истекает срок действия элементов в кэше.Было бы достаточно просто войти и изменить даты истечения срока действия ссылок, но тот факт, что они использовали двойные подчеркивания для префикса всей логики, связанной со ссылками, является своего рода подсказкой, которую автор действительно не хотел, чтобы высделать это.

Я бы порекомендовал просто реализовать свой собственный кеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...