143 votes

Existe-t-il une bibliothèque de mise en cache Python?

Je cherche une bibliothèque de mise en cache Python, mais je ne trouve rien pour l'instant. J'ai besoin d'une simple interface dict like où je peux définir les clés et leur expiration et les récupérer en cache. Une sorte de quelque chose comme:

 cache.get(myfunction, duration=300)
 

qui me donnera l'élément du cache s'il existe ou appelle la fonction et le stocke s'il n'a pas expiré ou s'il a expiré. Est-ce que quelqu'un sait quelque chose comme ça?

88voto

Genma Points 51

A partir de Python 3.2, vous pouvez utiliser le décorateur @lru_cache de la bibliothèque functools. C'est le dernier cache récemment utilisé, il n'y a donc pas de délai d'expiration pour les éléments qu'il contient, mais en tant que piratage rapide, il est très utile.

 from functools import lru_cache

@lru_cache(maxsize=256)
def f(x):
  return x*x

for x in range[20]
  print f(x)
for x in range[20]
  print f(x)
 

55voto

Corbin March Points 18522

Jetez un coup d'œil à Beaker:

30voto

tgray Points 4002

Vous pouvez également consulter le décorateur Memoize . Vous pourriez probablement le faire faire ce que vous voulez sans trop de modifications.

15voto

j13r Points 1515

Joblib http://packages.python.org/joblib/ prend en charge les fonctions de mise en cache dans le modèle Memoize. Généralement, l’idée est de mettre en cache des fonctions coûteuses en calcul.

 >>> from joblib import Memory
>>> mem = Memory(cachedir='/tmp/joblib')
>>> import numpy as np
>>> square = mem.cache(np.square)
>>> 
>>> a = np.vander(np.arange(3)).astype(np.float)
>>> b = square(a)                                   
________________________________________________________________________________
[Memory] Calling square...
square(array([[ 0.,  0.,  1.],
       [ 1.,  1.,  1.],
       [ 4.,  2.,  1.]]))
___________________________________________________________square - 0...s, 0.0min

>>> c = square(a)
 

Vous pouvez également faire des choses fantaisistes comme utiliser le décorateur @ memory.cache sur des fonctions. La documentation est ici: http://packages.python.org/joblib/memory.html

9voto

David Berger Points 5459

Je pense que l'API python memcached est l'outil le plus utilisé, mais je ne l'ai pas utilisé moi-même et je ne suis pas sûr qu'elle prenne en charge les fonctionnalités dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X