- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
本篇主要介绍Streamlit的核心架构和运行机制, 。
目的是希望朋友们能先从整体上宏观的了解Streamlit,利用它提供的机制开发性能更高效的应用.
Streamlit比较特殊,它对使用者来说是BS架构应用,而随开发者来说其实更像一个CS架构的应用.
为什么说Streamlit更像CS架构呢?
因为后端功能和前端UI部分都是用Python写,所以开发Streamlit应用时的感觉,就像开发桌面应用一样.
如果你有CS应用的开发经验,比如QT,.Net平台的winform或WPF等,那么开发Streamlit的应用会觉得非常亲切.
虽然最终是在浏览器中使用Streamlit应用,但是开发时完全不需要HTML、CSS或JavaScript等前端知识.
不过,Streamlit App部署之后,需要注意它BS应用的一面:
Streamlit App
发布之后是多用户使用的,根据预估的用户量考虑服务器的配置资源Streamlit App
,所以无法访问服务器的文件、目录或操作系统。Streamlit
命令或自定义组件,这些命令或组件将通过用户的浏览器访问这些设备Streamlit的主要流程简单直接:
streamlit run
命令启动App
页面Streamlit App每次接收用户操作之后,会重新运行整个代码,然后将重新渲染的页面返回, 。
这样会带来两个显而易见的问题.
比如:
import streamlit as st
import pandas as pd
from datetime import datetime
## 数据加载
def load_data():
df = pd.DataFrame()
df.index = pd.date_range("2024/10/01", periods=20)
df["A"] = range(20)
df["B"] = range(20)
st.text(f"加载数据时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}")
return df
# 加载数据
data = load_data()
date_range = st.slider(
"日期范围",
min_value=datetime(2024, 10, 1),
max_value=datetime(2024, 10, 20),
value=(datetime(2024, 10, 1), datetime(2024, 10, 20)),
)
data = data[data.index >= date_range[0]]
data = data[data.index <= date_range[1]]
st.table(data)
每次加载数据时,会显示数据加载的时间:st.text(f"加载数据时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}") 。
每次移动日期范围时,都会重新加载整个数据.
比如:
count = 0
st.text(f"Click {count}")
if st.button("ADD"): # 点击按钮时执行
count += 1
点击上面的按钮ADD,文本显示的始终是:Click 0.
因为,点击按钮时,执行count += 1之后,还会将整个代码重新执行,count=0 也被重新执行.
下一节介绍如何解决这两个问题.
解决Streamlit App的数据和状态无法保存的问题,就要用到缓存(cache)和状态(session)两个重要的功能.
首先,用缓存来改进上一节中的数据加载问题.
## 数据加载
@st.cache_data
def load_data():
#... 省略 ...
修改方法非常简单,只要在原来代码中的load_data函数上面加一个装饰器@st.cache_data就足够了.
改进之后,移动日期范围时,加载数据时间一直没变,说明没有反复的加载数据.
接下来,用状态(session)来修复上一节中计数无法增加的问题.
if "count" not in st.session_state:
st.session_state.count = 0
st.text(f"Click {st.session_state.count}")
if st.button("ADD"):
st.session_state.count += 1
把计数用的count放入st.session_state中.
st.session_state用于在用户的每次会话中共享变量,确保这些变量在重新运行时仍然可用.
本篇讨论了Streamlit的架构和运行机制,整体来看它的设计简单直接,很好理解.
随后介绍了Streamlit中的缓存cache和状态session,它们在数据处理、存储和持久性方面有着重要作用.
使用时,注意区分缓存cache和状态session的使用场景.
缓存cache主要用于提高应用性能,通过存储和重用之前计算过的结果来避免重复计算。它关注的是数据的处理效率和资源消耗; 。
而状态session主要用于在用户的会话中共享变量和状态信息。它关注的是用户数据的持久性和在不同事件回调之间的数据一致性.
最后此篇关于架构和运行机制的文章就讲到这里了,如果你想了解更多关于架构和运行机制的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以简化在裸机上运行的这条链: 具有随时间变化的副本数的 StatefulSet 服务 使用 proxy-next-upstream: "error http_502 timeout invali
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我需要为应用程序制定架构。它专为销售产品而设计。 系统每天将接受大约 30-40k 的新产品。它将导致在表 product 中创建新记录。 系统应保留价格历史记录。用户应该能够看到产品 A 的价格在去
我需要一些帮助来理解 PHP 的内部工作原理。 还记得,在过去,我们曾经写过 TSR(Terminate and stay resident)例程(pre-windows 时代)吗?一旦该程序被执行,
1.Nginx 基础架构 nginx 启动后以 daemon 形式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。如下图所示: master与
本文深入探讨了Kubernetes(K8s)的关键方面,包括其架构、容器编排、网络与存储管理、安全与合规、高可用性、灾难恢复以及监控与日志系统。 关注【TechLeadCloud】,
我知道 CNN 的工作原理,包括每一层的用途(Dropout、Pooling 等)。但是,在为新数据集设计 CNN 时,我不知道要使用多少个 Conv-Relu-Pool 层,在最终获得输出之前我应该
在基于 REST 的架构中,资源和方法之间有什么区别。有吗? 最佳答案 资源是您的应用程序定义的东西;它们与物体非常相似。方法是 HTTP 动词之一,例如 GET、POST、PUT、DELETE。它们
我想用 oneOf仅在 xyType 的值上不同的模式属性(property)。我想要其中两个:一个是 xyType设置为 "1"第二个在哪里xyType是 任何其他值 .这可以使用 json 模式完
寻求 PHP 架构师的建议! 我对 PHP 不是很熟悉,但已经接管了一个用该语言编写的大型分析包的维护工作。该架构旨在将报告的数据读取到大型键/值数组中,这些数组通过各种解析模块传递,以提取每个模块已
这些存在吗? 多年来,我一直是大型强类型面向对象语言(Java 和 C#)的奴隶,并且是 Martin Fowler 及其同类的信徒。 Javascript,由于它的松散类型和函数性质,似乎不适合我习
我已经阅读了 Manning 的 Big Data Lambda Architecture ( http://www.manning.com/marz/BD_meap_ch01.pdf ),但仍然无法
在过去的几年里,我做了相当多的 iOS 开发,所以我非常熟悉 iOS 架构和应用程序设计(一切都是一个 ViewController,您可以将其推送、弹出或粘贴到选项卡栏中)。我最近开始探索正确的 M
我有以下应用程序,我在其中循环一些数据并显示它。 {{thing.title}} {{thing.description}}
昨天我和我的伙伴讨论了我正在开发的这个电子购物网站的架构。请注意,我为此使用 ASP.NET。他非常惊讶地发现我没有将添加到购物车的项目保留在 ArrayList 或其他通用列表中,而是使用 LINQ
我正在使用在 tridion 蓝图层次结构中处于较低位置的出版物。从蓝图中较高级别的出版物继承的一些内容和模式不适合我的出版物,并且永远不会被我的出版物使用。 我将跟进添加这些项目的内部团队,并尝试说
我目前已经在 Cassandra 中设计了一个架构,但我想知道是否有更好的方法来做事情。基本上,问题在于大多数(如果不是全部)读取都是动态的。我构建了一个分段系统作为应用程序服务,读取动态自定义查询(
我正在按照 documentation 中给出的 icingaweb UI v 2.0 布局执行在服务器上设置 icinga 的步骤。 。我成功进入设置页面,该页面要求您输入 token ,然后按照步
我必须保存来自不同社交媒体的用户的不同个人资料。例如用户可能有 1 个 Facebook 和 2 个 Twitter 个人资料。如果我保存每个配置文件它作为新文档插入不同的集合中,例如 faceboo
我的团队使用 Puppet 架构,该架构目前可在多个环境(流浪者、暂存、生产)中容纳单个应用程序。 我们现在想要扩展此设置的范围以支持其他应用程序。他们中的许多人将使用我们已经定义的现有模块的子集,而
我是一名优秀的程序员,十分优秀!