论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
『玩转Streamlit』--缓存机制
『玩转Streamlit』--缓存机制
莫张周刘王
论坛元老
|
2025-2-26 09:51:30
|
显示全部楼层
|
阅读模式
楼主
主题
1943
|
帖子
1943
|
积分
5829
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
Streamlit 应用在运行时,每次用户交互都会触发整个脚本的重新实验。
这意味着一些耗时操作,如数据加载、复杂计算和模型训练等,可能会被重复实验,严重影响应用响应速度。
本文介绍的
缓存机制
能够帮助我们办理这些问题,进步Streamlit 应用的性能。
而Streamlit的
缓存机制
就像是给应用配备了一个
“影象助手”
,它允许开发者将特定函数的计算效果保存下来,当下次雷同输入再次调用该函数时,无需重新实验函数,直接返回缓存效果,极大地进步了应用运行效率,镌汰等待时间。
1. 为什么必要缓存
Streamlit的机制是每次用户交互或代码更改时都会重新运行脚本,这样就导致了:
重复计算
:长时间运行的函数可能会被多次调用,导致应用响应变慢
资源浪费
:频繁加载和处理大量数据会消耗大量内存和计算资源
用户体验差
:应用加载时间过长,影响用户交互体验
为了办理这些问题,Streamlit提供了缓存机制。
缓存机制
就像是给应用配备了一个
“影象助手”
,它允许开发者将特定函数的计算效果保存下来,当下次雷同输入再次调用该函数时,无需重新实验函数,直接返回缓存效果。
通过缓存函数的输出效果,避免重复计算,能够显着进步应用的性能和响应速度。
2. 两种缓存装饰器
Streamlit提供了两种缓存装饰器:st.cache_data和st.cache_resource,它们的重要区别在于缓存的对象类型和利用场景。
2.1. st.cache_data
st.cache_data是用于
缓存数据
的装饰器。
实用于缓存函数的输出效果,特别是那些返回可序列化数据对象的函数(如 Pandas DataFrame、NumPy 数组、字符串、整数等)。
它的重要参数有:
ttl:缓存的生存时间(以秒为单位)。凌驾该时间后,缓存将失效并重新计算。
max_entries:缓存中允许的最大条目数。超出该数量时,最旧的缓存条目将被删除。
persist:是否将缓存恒久化到磁盘上。默以为False。
show_spinner:是否表现加载动画。默以为True。
allow_output_mutation:是否允许返回值被修改。默以为False,建议谨慎利用。
2.2. st.cache_resource
st.cache_resource是用于
缓存资源
的装饰器。
实用于缓存那些必要初始化但不必要频繁重新计算的对象,如数据库连接、模型加载等。
它的重要参数有:
ttl和max_entries:与st.cache_data雷同。
show_spinner:是否表现加载动画。默以为True。
allow_output_mutation:是否允许返回值被修改。默以为False。
2.3. 两者区别总结
st.cache_data
st.cache_resource
利用场景实用于缓存函数的输出效果,特别是那些返回可序列化数据对象的函数实用于缓存那些必要初始化但不必要频繁重新计算的对象,如数据库连接、模型加载等特点缓存的是函数的输出效果,适合频繁调用且输出效果可能变革的场景缓存的是资源对象本身,适合初始化耗时但不必要频繁更新的场景缓存内容示例从 API 获取数据、加载 CSV 文件、数据处理等加载预训练模型、建立数据库连接等
3. 缓存利用示例
下面通过示例来演示这两种缓存装饰器的利用。
3.1. st.cache_data示例
假设我们有一个应用,必要从API获取数据并展示给用户。
由于数据加载可能必要较长时间,我们可以利用st.cache_data来缓存效果。
import streamlit as st
import requests
import pandas as pd
# 使用 st.cache_data 缓存数据加载
@st.cache_data(ttl=3600) # 缓存 1 小时
def fetch_data(api_url):
response = requests.get(api_url)
data = response.json()
df = pd.DataFrame(data)
return df
# 用户界面部分
st.title("使用 st.cache_data 缓存数据加载")
api_url = "https://jsonplaceholder.typicode.com/posts"
df = fetch_data(api_url)
st.write(df)
复制代码
在这个例子中,fetch_data函数被@st.cache_data装饰器修饰。
第一次调用时,数据会被加载并缓存,后续调用时直接从缓存中读取,避免重复哀求 API,
直至
1小时
后,缓存失效之后才能重新哀求。
3.2. st.cache_resource示例
假设我们有一个呆板学习应用,必要加载一个预训练的模型。
由于模型加载可能必要较长时间,我们可以利用st.cache_resource来缓存模型对象。
import streamlit as st
import joblib
# 使用 st.cache_resource 缓存模型加载
@st.cache_resource
def load_model(model_path):
model = joblib.load(model_path)
return model
# 用户界面部分
st.title("使用 st.cache_resource 缓存模型加载")
model_path = "path/to/your/model.pkl"
model = load_model(model_path)
st.write("模型已加载,可以进行预测!")
复制代码
在这个例子中,load_model函数被@st.cache_resource装饰器修饰。
模型加载后会被缓存,后续调用时直接从缓存中读取,避免重复加载。
4. 总结
Streamlit的缓存机制通过st.cache_data和st.cache_resource提供了强大的性能优化功能。
它们可以帮助开发者镌汰重复计算、节省资源,并显着进步应用的响应速度。
在实际开发中,开发者可以根据需求选择合适的缓存装饰器:
假如必要缓存函数的输出效果,利用st.cache_data
假如必要缓存初始化的资源对象,利用st.cache_resource
公道利用缓存机制,可以让 Streamlit 应用更加高效和流通,提升用户体验。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
莫张周刘王
论坛元老
这个人很懒什么都没写!
楼主热帖
06、etcd 写请求执行流程
网上书店管理系统项目【Java数据库编程 ...
软件测试项目实战经验附视频以及源码【 ...
【云原生】三、详细易懂的Docker 容器 ...
DevOps工具选型,什么才是中小企业的最 ...
如何用同一套账号接入整个研发过程? ...
四、WinUI3下TitleBar的自定义
面向大规模神经网络的模型压缩和加速方 ...
c# sqlsugar,hisql,freesql orm框架全 ...
攻防世界pwn题:实时数据检测 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表