Aprender Streamlit Estado de sesión, formularios y caché

Módulo del curso de Streamlit

Streamlit
Streamlit
Módulo del curso
Actualizado: 18/04/2026

Módulo: Estado de sesión, formularios y caché

Este módulo forma parte del curso de Streamlit. .

Comprender cómo Streamlit gestiona el estado y el rendimiento es esencial para construir aplicaciones robustas y eficientes. Este módulo cubre los mecanismos fundamentales: st.session_state para persistir datos entre reruns, st.form para agrupar entradas, st.fragment para reruns parciales y los decoradores de caché @st.cache_data y @st.cache_resource.

st.session_state: persistencia entre reruns

Por defecto, cada rerun reinicia todas las variables Python. st.session_state es un diccionario mutable que persiste entre reruns:

import streamlit as st

if "contador" not in st.session_state:
    st.session_state.contador = 0

if st.button("Incrementar"):
    st.session_state.contador += 1

st.write(f"Contador: {st.session_state.contador}")

Callbacks: on_change y on_click

Los callbacks permiten ejecutar lógica cuando un widget cambia, antes de que se re-ejecute el script:

def actualizar_total():
    st.session_state.total = st.session_state.precio * st.session_state.cantidad

precio = st.number_input("Precio", key="precio", on_change=actualizar_total)
cantidad = st.number_input("Cantidad", key="cantidad", on_change=actualizar_total)
st.metric("Total", f"€ {st.session_state.get('total', 0):.2f}")

st.form: envío por lotes

Los formularios agrupan varios widgets y los envían todos de una vez, evitando reruns intermedios:

with st.form("filtros"):
    fecha_inicio = st.date_input("Desde")
    fecha_fin = st.date_input("Hasta")
    categoria = st.selectbox("Categoría", ["Todas", "A", "B", "C"])
    enviado = st.form_submit_button("Aplicar filtros")

if enviado:
    st.success(f"Filtros aplicados: {fecha_inicio} — {fecha_fin}, {categoria}")

st.fragment: reruns parciales

@st.fragment marca una función cuyo cuerpo se re-ejecuta de forma independiente, sin volver a ejecutar el script completo:

@st.fragment(run_every="5s")  # Actualización automática cada 5 segundos
def mostrar_metricas_tiempo_real():
    df = obtener_datos_recientes()
    st.line_chart(df)

mostrar_metricas_tiempo_real()

@st.cache_data y @st.cache_resource

@st.cache_data(ttl=3600)  # Caché de 1 hora
def cargar_dataset(url: str) -> pd.DataFrame:
    return pd.read_csv(url)

@st.cache_resource  # Singleton: conexión a BD, modelo ML cargado
def cargar_modelo():
    import joblib
    return joblib.load("modelo.pkl")

df = cargar_dataset("https://datos.ejemplo.com/ventas.csv")
modelo = cargar_modelo()

@st.cache_data serializa el resultado (adecuado para DataFrames y valores serializables). @st.cache_resource almacena el objeto en memoria sin serializar (adecuado para conexiones de BD, modelos de ML y recursos pesados).

Explora más sobre Streamlit

Descubre más recursos de Streamlit

Alan Sastre - Autor del curso

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Streamlit es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.