utiliser un "cache" pour accélérer l'accès à des données [résolu]

utiliser un "cache" pour accélérer l'accès à des données [résolu] - Python - Programmation

Marsh Posté le 16-04-2013 à 13:41:42    

Bonjour,
dans le cadre d'un projet Python3, j'ai une fonction f() qui consomme beaucoup de temps; pour une entrée x donnée, f(x) donne toujours le même résultat.
Je voudrais donc placer sur disque une table recensant les résultats de f(x) pour les x les plus souvent demandés. Cette table serait alors placée en mémoire. Ordres de grandeur : x et f(x) font une trentaine d'octets chacun, il me faudrait mettre en mémoire peut-être un miller de correspondances x <-> f(x) : rien d'impossible donc.
 
Evidemment je pourrais faire ça vite fait mal fait mais je voudrais savoir :
(1) si Python a un module/un type de données spécialement conçu pour ça (au-delà des types courants comme dict, bien évidemment)
(2) quelles sont les bonnes pratiques ? En particulier, avec le temps, si j'ai un compteur associé aux x les plus courants, certaines valeurs atteindront des "taux de demande" très élevés; comment de nouvelles valeurs, très demandées subitement, peuvent être intégrées au "cache" ?
(3) y a-t-il un article sur ce sujet que je pourrais consulter ?
(4) pour stocker la table et la récupérer, dois-utiliser une base de données ou le module pickle ?
 
Merci d'avance.


Message édité par suizokukan le 22-04-2013 à 23:27:59

---------------
rule #1 : trust the python
Reply

Marsh Posté le 16-04-2013 à 13:41:42   

Reply

Marsh Posté le 22-04-2013 à 13:18:19    

functools.lru_cache ? (Python 3, backporté dans functools32 si tu es en Python 2, repoze.lru en fournit également un.

 

Ils sont tous en mémoire, pas de serialization disque du cache.


Message édité par masklinn le 22-04-2013 à 13:22:43

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-04-2013 à 23:27:43    

Un grand merci à Masklinn : outre la fonction Python, j'ai découvert grâce à la documentation le mot clef LRU (http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used) dont j'avais besoin.
 
Formidable !


---------------
rule #1 : trust the python
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed