De acuerdo con la documentación oficial de Python para el módulo weakref, "el uso principal para referencias débiles es implementar cachés o mapeos con objetos grandes, ...". Entonces, utilicé un WeakValueDictionary para implementar un mecanismo de caché para una función de larga ejecución. Sin embargo, como se vio después, los valores en el caché nunca permanecieron allí hasta que realmente se usarían de nuevo, pero necesitaban ser recalculados casi siempre. Como no había referencias sólidas entre los accesos a los valores almacenados en el WeakValueDictionary, el GC se deshizo de ellos (aunque no hubo absolutamente ningún problema con la memoria).Problemas con el GC al usar un WeakValueDictionary para cachés
Ahora, ¿cómo se supone que debo usar las cosas de referencia débiles para implementar un caché? Si mantengo referencias sólidas en algún lugar explícitamente para evitar que el GC elimine mis referencias débiles, no tendría sentido utilizar un Divalista de Débil en primer lugar. Probablemente debería haber alguna opción para el GC que lo indique: elimine todo lo que no tenga referencias y todo con referencias débiles solo cuando la memoria se está agotando (o se excede algún umbral). ¿Hay algo como eso? ¿O hay una mejor estrategia para este tipo de caché?