Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

262
Views
Diferencias de comportamiento global y por instancia de la memoria caché LRU de Python

Estoy revisando los detalles de implementación del decorador de caché LRU de Python. Para comprender correctamente el comportamiento del decorador lru_cache en diferentes escenarios, también revisé las siguientes respuestas SO:

  • Decorador de caché LRU de Python por instancia
  • Python: construyendo un caché LRU
  • La memoria caché LRU de Python en una clase ignora el límite de tamaño máximo cuando está decorada con un decorador de método estático o de método de clase

Hasta ahora, puedo decir que los comportamientos de almacenamiento en caché son diferentes en estos 3 escenarios:

  1. Decorar una función en el espacio de nombres global.
  2. Decorar un método de instancia en una clase.
  3. Decorar un método en una clase que luego se decora con un decorador de classmethod staticmethod o de método de clase.

El primer caso es el camino feliz donde cada función decorada con el decorador lru_cache tiene su propio caché. Esto ya está bien documentado . En el segundo caso, el caché se comparte entre múltiples instancias de la clase donde cada instancia tendrá diferentes claves para el mismo argumento del método de instancia. Esto se explica bastante bien en la última pregunta que he enumerado. En el tercer caso, la caché también se comparte entre varias instancias de la clase encapsuladora. Sin embargo, dado que el método estático o el método de clase no self toman como primer argumento, las instancias de la clase no crearán entradas de caché separadas para los mismos argumentos.

Mi pregunta es: ¿qué detalle de implementación define este comportamiento? En la implementación de la función lru_cache , solo puedo ver que un diccionario de caché local dentro de la función _lru_cache_wrapper está guardando las entradas de caché. Aquí está el fragmento:

 def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo): sentinel = object() make_key = _make_key PREV, NEXT, KEY, RESULT = 0, 1, 2, 3 cache = {} # This is a local dict, # then how come the instance cache entries are shared?

Lo que no entiendo es cómo se comparte este diccionario de caché local entre las instancias de una clase cuando el decorador lru_cache se aplica a un método que reside en la clase. Esperaba que actuara igual que el primer caso en el que cada entidad tiene su propio caché y no se comparte nada.

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!