Tamanho de fonte
Alto contraste
Altura de linha

Cache com Streamlit: Um Guia Simples para Iniciantes

Avatar de Ana Maria Gomes Ana Maria Gomes
10 minutos de leitura 1 mês atrás

Você já se perguntou como melhorar a performance dos seus aplicativos web criados com Streamlit? A resposta pode estar no uso de cache! Neste guia, vamos explorar o que é cache, por que ele é importante e como você pode utilizá-lo no Streamlit para criar aplicativos mais rápidos e eficientes. Vamos lá?

Introdução ao Cache

O cache é uma técnica utilizada para armazenar dados temporariamente em uma área de armazenamento de alta velocidade, conhecida como cache. O objetivo principal do cache é aumentar a velocidade de recuperação de dados, reduzindo a necessidade de acessar a camada de armazenamento subjacente, que é mais lenta. Em termos simples, o cache guarda uma cópia dos dados que você acessa com frequência, para que você não precise buscá-los novamente toda vez que precisar deles.

O que é cache?

O cache é como uma memória de curto prazo para o seu aplicativo. Imagine que você está estudando para uma prova e precisa consultar um livro várias vezes. Em vez de ir até a biblioteca toda vez que precisar do livro, você o mantém ao seu lado para acessá-lo rapidamente. O cache funciona de maneira semelhante, armazenando dados que são frequentemente acessados para que possam ser recuperados rapidamente.

Por que o cache é importante?

O cache é crucial para melhorar a performance dos aplicativos, especialmente quando se trabalha com grandes volumes de dados ou cálculos complexos. Sem cache, cada vez que você precisar dos dados, terá que buscá-los novamente, o que pode ser demorado e ineficiente. Com o cache, você pode armazenar os resultados de funções caras e reutilizá-los, economizando tempo e recursos computacionais.

Por que Precisamos de Cache no Streamlit?

O Streamlit é uma biblioteca de código aberto que permite criar aplicativos web interativos com apenas algumas linhas de código Python. No entanto, cada vez que uma interação ocorre no aplicativo, todo o script é executado novamente de cima para baixo. Isso pode levar a ineficiências, especialmente se o seu script incluir funções que carregam grandes conjuntos de dados ou realizam cálculos demorados.

Como o Streamlit funciona sem cache

Sem cache, cada interação no Streamlit faz com que todo o script seja reexecutado. Isso significa que funções caras, como carregar dados de uma API ou treinar um modelo de machine learning, serão executadas repetidamente, mesmo que os dados ou o modelo não tenham mudado. Isso pode tornar o aplicativo lento e menos responsivo.

Benefícios do uso de cache no Streamlit

O uso de cache no Streamlit pode trazer vários benefícios:

  • Melhoria de desempenho: Armazenando os resultados de chamadas de função caras no cache, você pode acelerar significativamente seus aplicativos Streamlit.
  • Maior eficiência: O cache permite evitar cálculos desnecessários. Se uma função foi chamada antes com os mesmos argumentos, o Streamlit pode recuperar o resultado do cache em vez de reexecutar a função.
  • Melhor experiência do usuário: Tempos de carregamento mais rápidos e aplicativos mais responsivos proporcionam uma melhor experiência ao usuário.

O cache no Streamlit é essencial para otimizar o desempenho das aplicações. Cada vez que uma interação ocorre, o Streamlit recarrega o script inteiro, o que pode ser ineficiente e demorado, especialmente para operações que consomem muitos recursos, como carregamento de dados ou cálculos complexos. O caching permite armazenar resultados de operações dispendiosas, evitando a necessidade de recalculá-las a cada interação. Isso não só melhora a velocidade de resposta da aplicação, mas também reduz a carga no servidor, tornando a experiência do usuário mais fluida e eficiente.

Como Funciona o Cache no Streamlit?

O cache no Streamlit é uma técnica utilizada para armazenar resultados de funções que consomem muito tempo ou recursos, evitando a necessidade de recalculá-los a cada execução. Isso é especialmente útil em aplicações que lidam com grandes volumes de dados ou operações complexas.

Decoradores de cache: @st.cache_data e @st.cache_resource

O Streamlit oferece dois decoradores principais para cache: @st.cache_data e @st.cache_resource. Cada um tem seu propósito específico e pode ser usado conforme a necessidade do seu aplicativo.

  • @st.cache_data: Esse decorador cacheia funções que retornam dados, como transformações de dataframes, consultas a bancos de dados ou inferências de machine learning. Ele armazena os objetos cacheados em forma “pickled”, o que significa que o valor retornado de uma função cacheada precisa ser “pickleable”.
  import streamlit as st
  import pandas as pd

  @st.cache_data
  def load_data():
      data = pd.read_csv('large_dataset.csv')
      return data

  data = load_data()
  st.write(data)

No exemplo acima, a função load_data é executada apenas uma vez, independentemente de quantas vezes o script for reexecutado. O resultado é armazenado no cache para uso futuro, economizando tempo e recursos computacionais.

  • @st.cache_resource: Este decorador é usado para cachear funções que retornam recursos globais, como conexões de banco de dados ou modelos de machine learning. Os objetos cacheados são compartilhados entre todos os usuários, sessões e reexecuções, e devem ser thread-safe.
  import streamlit as st
  from transformers import pipeline

  @st.cache_resource
  def load_model():
      model = pipeline("sentiment-analysis")
      return model

  model = load_model()
  st.write(model("I love Streamlit!"))

No exemplo acima, a função load_model carrega um modelo de análise de sentimentos apenas uma vez. O modelo é então armazenado no cache e reutilizado em todas as sessões e reexecuções.

Diferenças entre st.cache_data e st.cache_resource

  • st.cache_data: Ideal para cachear dados que são específicos para cada chamada de função. Cada chamada recebe sua própria cópia dos dados cacheados.
  • st.cache_resource: Ideal para cachear recursos globais que são compartilhados entre todas as chamadas de função. Os recursos devem ser thread-safe, pois podem ser acessados de múltiplas threads simultaneamente.

O que é Caching?

Caching armazena dados temporariamente para que futuras solicitações sejam atendidas mais rapidamente. No contexto do Streamlit, isso significa guardar os resultados de funções que demandam muito tempo ou recursos, para que não precisem ser recalculados sempre que a aplicação é atualizada.

Benefícios do Caching no Streamlit

  1. Desempenho Melhorado: Reduz o tempo de carregamento da aplicação, proporcionando uma experiência de usuário mais fluida.
  2. Eficiência de Recursos: Diminui a carga sobre o servidor, economizando recursos computacionais.
  3. Escalabilidade: Facilita a escalabilidade da aplicação, permitindo que ela suporte mais usuários simultaneamente.

Desafios do Caching no Streamlit

  1. Consistência dos Dados: Manter o cache atualizado pode ser desafiador, especialmente se os dados subjacentes mudam frequentemente.
  2. Gerenciamento de Memória: O armazenamento de grandes volumes de dados em cache pode consumir muita memória, exigindo uma gestão cuidadosa.
  3. Complexidade Adicional: Implementar e gerenciar o cache adiciona uma camada extra de complexidade ao desenvolvimento da aplicação.

Benefícios do Uso de Cache no Streamlit

Melhoria de desempenho

O cache melhora significativamente o desempenho do seu aplicativo Streamlit, especialmente ao trabalhar com grandes conjuntos de dados ou cálculos complexos. Quando você armazena os resultados de funções que exigem muitos recursos, evita a reexecução dessas funções, economizando tempo e poder computacional.

Maior eficiência

O cache permite evitar cálculos desnecessários. Ao chamar uma função com os mesmos argumentos de uma execução anterior, o Streamlit recupera o resultado do cache em vez de reexecutar a função.. Isso aumenta a eficiência do seu aplicativo, permitindo que ele responda mais rapidamente às interações do usuário.

Melhor experiência do usuário

Tempos de carregamento mais rápidos e aplicativos mais responsivos proporcionam uma melhor experiência ao usuário. Com o cache, os usuários não precisam esperar que os dados sejam carregados ou que os cálculos sejam concluídos toda vez que interagem com o aplicativo.

Desafios do Uso de Cache no Streamlit

Gerenciamento do cache

Gerenciar o cache pode ser complicado. Você deve garantir que ele não consuma muita memória e que seja invalidado corretamente quando os inputs de uma função cacheada mudarem. O Streamlit oferece métodos para limpar o cache, como st.cache_data.clear() e st.cache_resource.clear(), que podem ser usados para gerenciar o cache de forma eficaz.

Debugging com cache

Debugging pode ser mais complexo com o uso de cache. Se a saída de uma função for lida do cache, quaisquer declarações de impressão ou efeitos colaterais na função não ocorrerão, o que pode dificultar a depuração. É importante estar ciente disso ao desenvolver e depurar aplicativos com cache.

Persistência do cache

Por padrão, o cache do Streamlit é limpo toda vez que o servidor do Streamlit é reiniciado. Se você precisar de cache persistente entre várias execuções, precisará usar opções de cache avançadas ou soluções de cache externas.

Exemplos Práticos de Uso de Cache no Streamlit

Cache de dados de uma API

import streamlit as st
import requests

@st.cache_data
def fetch_data(api_url):
    response = requests.get(api_url)
    return response.json()

data = fetch_data("https://api.example.com/data")
st.write(data)

De resultados de visualizações de dados

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

@st.cache_data
def create_plot(data):
    fig, ax = plt.subplots()
    ax.plot(data['x'], data['y'])
    return fig

data = pd.DataFrame({'x': range(10), 'y': range(10)})
fig = create_plot(data)
st.pyplot(fig)

Cache de modelos de Machine Learning

import streamlit as st
from sklearn.ensemble import RandomForestClassifier

@st.cache_resource
def load_model():
    model = RandomForestClassifier()
    return model

model = load_model()
st.write(model)

Boas Práticas para Uso de Cache no Streamlit

Uso moderado do @st.cache

Embora o cache melhore significativamente o desempenho do seu aplicativo, ele pode consumir muita memória se você não usá-lo com cuidado. Use @st.cache apenas para funções que realizam cálculos caros ou carregam grandes conjuntos de dados.

Evitar efeitos colaterais em funções cacheadas

Funções marcadas com @st.cache não devem ter efeitos colaterais. Efeitos colaterais são mudanças que uma função faz em seu ambiente, como modificar uma variável global ou escrever em um arquivo. Ao cachear uma função com efeitos colaterais, esses efeitos ocorrerão apenas na primeira vez que a função é chamada.

Atenção a argumentos mutáveis

Quando uma função cacheada aceita argumentos mutáveis, como listas ou dicionários, esteja ciente de que o Streamlit usa os valores iniciais desses argumentos para identificar o resultado cacheado. Modificando os argumentos após chamar a função, o Streamlit não reconhecerá as modificações e retornará o resultado cacheado.

Conclusão

Neste guia, você descobrirá o que é cache, por que ele é essencial e como utilizá-lo no Streamlit para criar aplicativos mais rápidos e eficientes. Vamos aprender a usar os decoradores @st.cache_data e @st.cache_resource, entender suas diferenças e aplicá-los em exemplos práticos. Além disso, discutiremos os benefícios e desafios do uso de cache no Streamlit, compartilhando boas práticas para garantir que você utilize o cache de forma eficaz.

Se quiser continuar aprendendo sobre Streamlit e outras ferramentas de visualização de dados, explore a documentação oficial do Streamlit e outros recursos disponíveis online. Boa sorte com seus projetos e continue explorando o mundo da programação e visualização de dados!

Referências

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov