Estou procurando uma biblioteca de cache Python, mas não consigo encontrar nada até agora. Preciso de uma dict
interface simples , onde eu possa definir as chaves e a validade delas e recuperá-las em cache. Tipo de algo como:
cache.get(myfunction, duration=300)
que fornecerá o item do cache, se existir, ou chamará a função e armazenará se não existir ou expirar. Alguém sabe algo assim?
item
no seu exemplo.Respostas:
Dê uma olhada no Beaker:
fonte
No Python 3.2, você pode usar o decorador @lru_cache da biblioteca functools. É um cache usado pela última vez recentemente, portanto, não há tempo de expiração para os itens, mas como um hack rápido, é muito útil.
fonte
Você também pode dar uma olhada no decorador Memoize . Você provavelmente conseguirá fazer o que deseja sem muita modificação.
fonte
O Joblib https://joblib.readthedocs.io suporta funções de armazenamento em cache no padrão Memoize. Principalmente, a idéia é armazenar em cache funções computacionalmente caras.
Você também pode fazer coisas sofisticadas, como usar o decorador @ memory.cache em funções. A documentação está aqui: https://joblib.readthedocs.io/en/latest/generated/joblib.Memory.html
fonte
Ninguém mencionou arquivar ainda. https://docs.python.org/2/library/shelve.html
Não é armazenado em cache, mas parece muito mais simples e pode atender às suas necessidades.
fonte
Eu acho que a API do python memcached é a ferramenta predominante, mas eu não a usei sozinha e não tenho certeza se ela suporta os recursos necessários.
fonte
fonte
get
método, isso não deve ser uma subclasse de ditado, deve ser um objeto com um ditado incorporado.Você pode usar minha solução simples para o problema. É realmente simples, nada sofisticado:
Na verdade, falta funcionalidade de expiração, mas você pode estendê-la facilmente especificando uma regra específica no c-tor do MemCache.
O código de esperança é auto-explicativo suficiente, mas, se não, apenas para mencionar, esse cache está sendo transmitido para uma função de tradução como um de seus parâmetros c-tor. Por sua vez, é usado para gerar saída em cache referente à entrada.
Espero que ajude
fonte
else
em__getitem__
:)else
no__getitem__
? É onde ele preenche o dict ...Tente redis, é uma das soluções mais limpas e fáceis para aplicativos compartilharem dados de maneira atômica ou se você possui alguma plataforma de servidor da web. É muito fácil de configurar, você precisará de um cliente python redis http://pypi.python.org/pypi/redis
fonte
Veja gocept.cache no pypi, gerencie o tempo limite.
fonte
Este projeto tem como objetivo fornecer "Armazenamento em cache para humanos" (parece que é bastante desconhecido)
Algumas informações da página do projeto:
Instalação
cache de instalação do pip
Uso:
fonte
Veja bda.cache http://pypi.python.org/pypi/bda.cache - usa o ZCA e é testado com o zope e o bfg.
fonte
keyring é a melhor biblioteca de cache python. Você pode usar
fonte