@st.cache_resource
是 Streamlit 提供的一个装饰器,用于缓存返回全局资源(如数据库连接、机器学习模型等)的函数。这些缓存的对象可以在所有用户、会话和重新运行中全局可用。这个装饰器特别适合于那些本质上不可序列化的类型,例如数据库连接、文件句柄或线程等,但也可以用于可序列化的对象。缓存的对象必须是线程安全的,因为它们可能会被多个线程同时访问。如果线程安全成为问题,可以考虑使用 st.session_state
来存储每个会话的资源。
@st.cache_resource
装饰器的使用示例如下:
import streamlit as st
import pandas as pd
from sqlalchemy import create_engine
@st.cache_resource(ttl=10800) # 3小时过期
def pd_mysql():
host='localhost'
port=3306
username='root'
password='123456'
db='mydb'
db_url = f'mysql+mysqlconnector://{username}:{password}@{host}:{port}/{db}'
engine = create_engine(db_url)
return engine
engine = pd_mysql() # 创建引擎