You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:47:02