翻译: Streamlit从入门到精通 高级用法缓存Cache和Session 五

这篇具有很好参考价值的文章主要介绍了翻译: Streamlit从入门到精通 高级用法缓存Cache和Session 五。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Streamlit从入门到精通 系列:

  1. 翻译: Streamlit从入门到精通 基础控件 一
  2. 翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二
  3. 翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三
  4. 翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四
    翻译: Streamlit从入门到精通 高级用法缓存Cache和Session 五,LLM-Large Language Models,缓存,langchain,prompt,chatgpt,python,streamlit

现在您已经了解了 Streamlit 应用程序如何运行和处理数据,让我们来谈谈效率。缓存允许您保存函数的输出,以便在重新运行时跳过它。会话状态允许您保存在重新运行之间保留的每个用户的信息。这不仅可以避免不必要的重新计算,还可以创建动态页面并处理渐进式流程。

1. Caching 缓存

Streamlit 缓存使您的应用程序即使在从 Web 加载数据、操作大型数据集或执行昂贵的计算时也能保持性能。

缓存背后的基本思想是存储成本高昂的函数调用的结果,并在再次出现相同的输入时返回缓存的结果,而不是在后续运行时调用函数。

要在 Streamlit 中缓存函数,您需要使用以下两个装饰器(st.cache_datast.cache_resource)之一来装饰它:

@st.cache_data
def long_running_function(param1, param2):
    return

在此示例中,使用 @st.cache_data 装饰long_running_function告诉 Streamlit,每当调用该函数时,它都会检查两件事:

  1. 输入参数的值(在本例中为 param1param2)。
  2. 函数内部的代码。

如果这是 Streamlit 第一次看到这些参数值和函数代码,它会运行该函数并将返回值存储在缓存中。下次使用相同的参数和代码调用函数时(例如,当用户与应用程序交互时),Streamlit 将完全跳过执行该函数并返回缓存的值。在开发过程中,缓存会随着函数代码的变化而自动更新,从而确保最新的更改反映在缓存中。

如前所述,有两个缓存装饰器:

  • st.cache_data 是缓存返回数据的计算的推荐方法:从 CSV 加载 DataFrame、转换 NumPy 数组、查询 API 或任何其他返回可序列化数据对象的函数(str、int、float、DataFrame、array、list 等)。它会在每次函数调用时创建一个新的数据副本,使其免受突变和竞争条件的影响。st.cache_data的行为是您想要的——所以如果您不确定,请从st.cache_data开始,看看它是否有效!
  • st.cache_resource 是缓存全局资源(如 ML 模型或数据库连接)的推荐方法,这些资源是您不想多次加载的不可序列化对象。使用它,您可以在应用程序的所有重新运行和会话之间共享这些资源,而无需复制或复制。请注意,对缓存返回值的任何突变都会直接改变缓存中的对象(更多详细信息见下文)。

翻译: Streamlit从入门到精通 高级用法缓存Cache和Session 五,LLM-Large Language Models,缓存,langchain,prompt,chatgpt,python,streamlit
有关 Streamlit 缓存装饰器、其配置参数及其限制的详细信息,请参阅缓存。

2. Session State 会话状态

会话状态提供了一个类似于字典的界面,您可以在其中保存在脚本重新运行之间保留的信息。使用带有键或属性表示法st.session_state来存储和调用值。例如,st.session_state["my_key"]st.session_state.my_key。请记住,小部件会自行处理其状态,因此您不必总是使用会话状态!

2.1 什么是会话Session?

会话是查看应用程序的单个实例。如果您从浏览器中的两个不同选项卡查看应用程序,则每个选项卡都有自己的会话。因此,应用的每个查看者都将有一个与其特定视图相关联的会话状态。Streamlit 在用户与应用程序交互时维护此会话。如果用户刷新其浏览器页面或重新加载应用的 URL,则其会话状态将重置,并重新开始新的会话。

2.2 使用会话状态的示例

这是一个简单的应用程序,用于计算页面的运行次数。每次单击该按钮时,脚本都会重新运行。

import streamlit as st

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

st.session_state.counter += 1

st.header(f"This page has run {st.session_state.counter} times.")
st.button("Run it again")
  • 首次运行:首次为每个用户运行应用时,“会话状态”为空。因此,将创建一个键值对 ("counter":0)。随着脚本的继续,计数器会立即递增 ("counter":1),并显示结果:“此页面已运行 1 次。当页面完全呈现时,脚本已完成,Streamlit 服务器等待用户执行某些操作。当该用户单击该按钮时,将开始重新运行。
  • 第二轮:由于“counter”已经是会话状态中的键,因此不会重新初始化。随着脚本的继续,计数器将递增 ("counter":2),并显示结果:“此页面已运行 2 次。

在一些常见情况下,会话状态很有帮助。如上所示,当您有一个渐进式进程,并且希望从一次重新运行到下一次重新运行时,将使用会话状态。会话状态还可用于防止重新计算,类似于缓存。但是,这些差异很重要:

  • Cache缓存将存储的值与特定函数和输入相关联。所有会话中的所有用户都可以访问缓存的值。
  • Session会话状态将存储的值与键(字符串)相关联。会话状态中的值仅在保存该值的单个会话中可用。

如果您的应用中具有随机数生成功能,则可能会使用会话状态。下面是一个示例,其中数据在每个会话开始时随机生成。通过将这些随机信息保存在会话状态中,每个用户在打开应用程序时都会获得不同的随机数据,但在他们与应用程序交互时,这些数据不会不断变化。如果使用选取器选择不同的颜色,则会看到数据不会在每次重新运行时重新随机化。(如果您在新选项卡中打开应用程序以开始新会话,您将看到不同的数据!

import streamlit as st
import pandas as pd
import numpy as np

if "df" not in st.session_state:
    st.session_state.df = pd.DataFrame(np.random.randn(20, 2), columns=["x", "y"])

st.header("Choose a datapoint color")
color = st.color_picker("Color", "#FF0000")
st.divider()
st.scatter_chart(st.session_state.df, x="x", y="y", color=color)

如果要为所有用户提取相同的数据,则可能会缓存检索该数据的函数。另一方面,如果提取特定于用户的数据(例如查询其个人信息),则可能需要将其保存在会话状态中。这样,查询的数据仅在该会话中可用。

如主要概念中所述,会话状态也与小部件相关。小部件是神奇的,可以自己安静地处理状态。但是,作为一项高级功能,您可以通过为小部件分配键来操作代码中小部件的值。分配给小组件的任何键都将成为与小组件值绑定的会话状态中的键。这可用于操作小部件。了解完 Streamlit 的基础知识后,如果您有兴趣,请查看我们的 Widget 行为指南以深入了解详细信息。

参考

https://docs.streamlit.io/get-started/fundamentals/advanced-concepts#what-is-a-session文章来源地址https://www.toymoban.com/news/detail-800574.html

到了这里,关于翻译: Streamlit从入门到精通 高级用法缓存Cache和Session 五的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • XPath从入门到精通:基础和高级用法完整指南,附美团APP匹配示例

    XPath 通常用来进行网站、XML (APP )和数据挖掘,通过元素和属性的方式来获取指定的节点,然后抓取需要的信息。 学习 XPath 语法之前,首先了解一下一些概念。 以上面的 HTML 节点树为例,节点之间包含了下列的关系: 父节点 (Parent): HTML 是 DIV 和 P 节点的父节点; 子节点

    2024年02月19日
    浏览(40)
  • Spring Boot 缓存 Cache 入门

    在系统访问量越来越大之后,往往最先出现瓶颈的往往是数据库。而为了减少数据库的压力, 我们可以选择让产品砍掉消耗数据库性能的需求 。 当然也可以引入缓存,在引入缓存之后,我们的读操作的代码,往往代码如下: 这段代码,是比较常用的缓存策略,俗称**“被动写

    2024年02月15日
    浏览(53)
  • Python高级用法:装饰器用于缓存

    缓存装饰器与参数检查十分相似,不过它重点是关注那些内部状态不会影响输出的函数。每组参数都可以链接到唯一的结果。这种编程风格是函数式编程的特点,当输入值有限时可以使用。 因此,缓存装饰器可以将输出与计算它所需要的参数放在一起,并在后续的调用中直接

    2024年01月25日
    浏览(49)
  • springboot 高级教程 jetcache 二级缓存用法

    多级缓存实际上是在二级缓存的基础上,为了更好地提高系统的性能和可靠性,更适用于大型分布式系统的应用场景。 使用多级缓存的原因包括: 数据缓存分层:不同级别的缓存可以被用来缓存不同类型、不同频率访问的数据。在这种情况下,系统会先在本地缓存中寻找数

    2024年02月08日
    浏览(38)
  • ClickHouse从入门到精通(高级)

    第1章 Explain查看执行计划 第2章 建表优化 第3章 ClickHouse语法优化规则 第4章 查询优化 第5章 数据一致性(重点) 第6章 物化视图 第7章 MaterializeMySQL引擎 第8章 常见问题排查

    2024年02月19日
    浏览(40)
  • ASP.NET Core MVC 从入门到精通之缓存

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2024年02月10日
    浏览(57)
  • 中间件系列 - Redis入门到实战(高级篇-多级缓存)

    学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 JVM进程缓存 Lua语法入门 实现多级缓存 缓存同步策略 传统的缓存策略

    2024年02月03日
    浏览(59)
  • C#操作MySQL从入门到精通(8)——对查询数据进行高级过滤

    我们在查询数据库中数据的时候,有时候需要剔除一些我们不想要的数据,这时候就需要对数据进行过滤,比如学生信息中,我只需要年龄等于18的,同时又要家乡地址是安徽的,类似这种操作专栏第7篇的C#操作MySQL从入门到精通(7)——对查询数据进行简单过滤简单过滤方法就

    2024年04月15日
    浏览(53)
  • 【go从入门到精通】go基本类型和运算符用法

                 大家好,这是我给大家准备的新的一期专栏,专门讲golang,从入门到精通各种框架和中间件,工具类库,希望对go有兴趣的同学可以订阅此专栏。 ---------------------------------------------------------------------------------------------------------------------------------              

    2024年03月08日
    浏览(46)
  • streamlit-高级功能

    参考资料 streamlit高级功能

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包