Python@lru\u cache(maxsize=None)和Instan中的Dictionary存储之间的区别

2024-05-21 00:18:41 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python3.7中的@lru_cache(maxsize=None)缓存与简单地将其存储在实例中的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'))

输出

Querying database for dragon...

{'name': 'dragon', 'data': 6700266117116448468}

{'name': 'dragon', 'data': 6700266117116448468}

Querying database for lion...

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

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


Tags: nameselfcachedbdatagetdefprint