Как кэшировать функцию утилит, используемую в разных экземплярах классов, используя lru_cache? - PullRequest
0 голосов
/ 20 апреля 2019

При использовании lru_cache в модуле утилит, после оформления метода и вызова из двух разных экземпляров класса, я обнаружил, что cache_info() показывает только один удар каждый раз, когда вызывается декорированный метод.

awsUtils.py :


@lru_cache(maxsize=32)
def getRdsDetailsCached(name, region):
  return getRdsDetails(name, region):

def getRdsDetails(name, region):
  client = boto3.client('rds', region)
  response = client.describe_db_instances(DBInstanceIdentifier=name,)
  return response['DBInstances']

Replication.py

class Replication(ActionBase):

  def __init__(self, **entries):
    super().__init__(**entries)
    self.rdsDetails = awsUtils.getRdsDetailsCache('my-db', 'us-west-2')

Postgress.py

class Postgress(DependencyBase):

  def __init__(self, **entries):
    super().__init__(**entries)
    self.rdsDetails = awsUtils.getRdsDetailsCache('my-db', 'us-west-2')

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

Image showing cache result after second call to getRdsDetailsCache

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