如何阻止Streamlit重复执行代码?指定代码单次执行位置咨询
解决Streamlit代码重复执行的问题
Streamlit的运行机制是每次用户交互(比如输入内容、触发组件)都会重新执行整个脚本,所以你的print("repeat...")会反复触发。要让这段代码仅执行一次,可以借助st.session_state来做执行标记:
修改后的代码示例
import streamlit as st # 构建聊天界面 st.set_page_config(page_title="Title") st.title("ChatUI") # 仅执行一次的代码块 if "has_run_once" not in st.session_state: print("repeat...") # 标记已执行,后续脚本重跑时不再进入这个分支 st.session_state["has_run_once"] = True if text := st.chat_input(placeholder="Say something."): print(text) st.chat_message("user").write(text)
原理说明
st.session_state是Streamlit用来保存跨会话状态的容器,只要用户的浏览器会话不关闭,里面的变量就会持续存在。- 第一次运行脚本时,
"has_run_once"不在session_state中,会执行目标代码并设置标记;之后每次交互触发脚本重跑时,因为标记已存在,就会跳过这段代码。
内容的提问来源于stack exchange,提问作者IronSpiderMan
相关产品推荐
相关产品推荐

