Разница между Python @ lru_cache (maxsize = None) и хранением в словаре в экземпляре - PullRequest
0 голосов
/ 25 октября 2019

Есть ли разница в производительности между кэшированием с использованием @lru_cache(maxsize=None) из Python 3.7 functools и простым хранением его в dict в экземпляре?

Какой рекомендуемый подход?

Пример кода

from functools import lru_cache
import time

class Db:
    @classmethod
    def get_animal(cls, name):
        print(f'Querying database for {name}...')
        time.sleep(3)  # simulate expensive DB call
        return {'name': name, 'data': hash(name)}

class Zoo:
    animals = {}

    def get_animal(self, name):
        if name not in self.animals:
            self.animals[name] = Db.get_animal(name)
        return self.animals[name]

    @lru_cache(maxsize=None)
    def get_animal_alt(self, name):
        return Db.get_animal(name)

zoo = Zoo()

print(zoo.get_animal('dragon'))
print(zoo.get_animal('dragon'))

print(zoo.get_animal_alt('lion'))
print(zoo.get_animal_alt('lion'))

Вывод

Запрос базы данных для дракона ...

{'имя ':' дракон ',' данные ': 6700266117116448468}

{' имя ':' дракон ',' данные ': 6700266117116448468}

Запрос базы данных для льва ...

{'name': 'lion', 'data': 1221476345714202007}

{'name': 'lion', 'data': 1221476345714202007}

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