streamlit @st.cache_data 和 @st.cache_resource 的区别

举报
福州司马懿 发表于 2025/01/07 14:48:01 2025/01/07
【摘要】 streamlit 是一个开源的Python库,用于快速构建数据应用和机器学习模型的原型。在 streamlit 中,@st.cache_data 和 @st.cache_resource 是两种不同的装饰器,它们都用于缓存数据以提高应用的性能,但是它们的使用场景和缓存机制有所不同。以下是 @st.cache_data 和 @st.cache_resource 的主要区别: @st.cach...

streamlit 是一个开源的Python库,用于快速构建数据应用和机器学习模型的原型。在 streamlit 中,@st.cache_data@st.cache_resource 是两种不同的装饰器,它们都用于缓存数据以提高应用的性能,但是它们的使用场景和缓存机制有所不同。
以下是 @st.cache_data@st.cache_resource 的主要区别:

@st.cache_data

  • 目的:用于缓存函数的输出结果,尤其是那些计算成本高的数据或计算结果。
  • 存储位置:缓存的 数据存储在内存中。
  • 生命周期:当用户的会话结束时,缓存的数据会被清除。
  • 适用场景:适用于缓存轻量级的数据,如计算结果、小型数据集等。
  • 限制:不应该用于缓存大型数据集或对象,因为这可能会导致内存使用量过大。

@st.cache_resource

  • 目的:用于缓存资源,如数据库连接、大型数据文件或模型对象,这些资源初始化成本高,且在应用的生命周期内不需要经常改变。
  • 存储位置:缓存的资源可以存储在磁盘上,不仅仅限于内存。
  • 生命周期:缓存的资源在应用重启之前都会保持缓存状态,不会因为用户会话结束而清除。
  • 适用场景:适用于缓存初始化成本高的资源,如数据库连接、大型文件读取、机器学习模型等。
  • 限制:由于资源缓存不会在用户会话结束时清除,因此使用时需要确保不会造成资源泄露或不必要的磁盘空间占用。

使用建议

  • 当你需要缓存的数据是轻量级的,并且生命周期与用户会话相同,使用 @st.cache_data
  • 当你需要缓存的是初始化成本高的资源,并且这些资源在应用重启前不需要改变,使用 @st.cache_resource
    正确使用这些装饰器可以显著提高 streamlit 应用的性能,但也要注意不要滥用,以避免造成内存或磁盘空间的浪费。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。