@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() # 创建引擎
在这个例子中,@st.cache_resource
用于缓存数据库连接引擎,避免了每次运行时都重新创建连接,从而提高了应用的性能。ttl
参数指定了缓存的过期时间,例如 ttl=10800
表示缓存的对象在3小时后过期1。
此外,@st.cache_resource
还提供了一些其他参数,如 max_entries
用于限制缓存中的最大条目数,show_spinner
用于控制是否显示加载指示器,validate
用于提供一个验证函数来检查缓存数据的有效性,以及 hash_funcs
用于自定义哈希函数。
总的来说,@st.cache_resource
是一个强大的工具,用于优化 Streamlit
应用的性能,特别是在处理全局资源时。