Funções com cache usando decorators

Opa. Muuuito tempo que não posto nada. Vou tentar postar mais coisas, juro =]

Estava discutindo esses dias com uns amigos sobre gerar sequência de
fibonnaci recursivamente e como programação dinâmica ajudaria a
diminuir a complexidade do programa.

Foi aí que veio a grande ideia: Fazer algo em python pra criar uma
cache de uma dada função.

Usei algumas coisas que aprendi nesse post do Guido e implementei uma cache pra uma função qualquer.

A ideia básica é a seguinte:
Quando a função é chamada, é necessário checar se ela já foi chamada anteriormente, se já foi chamada, basta simplesmente pegar o resultado guardado e retornar.
Se a função não foi chamada ainda, chamamos ela e guardamos em um mapeamento da forma (argumentos) -> retorno.

A primeira versão tinha uma cache de tamanho infinito (o que não é inviável pra coisas práticas). Depois resolvi implementar uma cache com tamanho finito (definido pela variável “size”) e política de substituição LRU. Para a implementação do LRU, devido à natureza desordenada do map, foi necessário adicionar uma lista pra manter a contagem de referências.

Quase esqueci de postar o código. dã.

Vocês podem encontrar ele no meu perfil do github.

Uma possível aplicação prática disso, pode ser implementar cache pra buscas em bancos de dados. Pra evitar fazer pesquisa em disco e também evitar deixar tudo em memória.

Bom, acho que é isso. Caso alguém tiver alguma dúvida, posta aí nos
comentários ou manda um email, ou qualquer coisa parecida =]

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: