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

如何在Streamlit中实现每4秒切换随机加载提示语?

解决方案:Streamlit中实现动态切换加载提示语

核心思路

由于Streamlit自带的st.spinner不支持动态更新文本,我们可以通过后台线程执行耗时任务+定时更新占位符文本的方式,实现每4秒切换提示语的效果,同时避免阻塞页面交互。

修改后的完整代码

import streamlit as st
import random
import threading
import time

st.set_page_config(page_title="Content Summarizer", page_icon="icon.png", layout="wide")

st.title("Content Summarizer")
st.write("Catchy text")

# 补全文本输入框参数,原代码遗漏必要配置
url = st.text_input("请输入需要摘要的内容URL:")

loader_messages = ["正在梳理内容逻辑...", "正在提炼核心观点...", "正在优化摘要措辞...", "马上就好啦😉"]

# 定义耗时的摘要任务(替换为你的OpenAI API调用逻辑)
def run_summarization(url, result_store):
    # 模拟15秒的API调用时长,实际开发中替换为OpenAI请求代码
    time.sleep(15)
    # 存储生成的摘要结果
    result_store.append("这是生成的最终摘要内容示例")

if st.button("生成摘要") and url:
    # 用列表存储结果(线程间共享数据的简便方式)
    summary_result = []
    # 启动后台线程执行摘要任务,避免阻塞主线程
    summarization_thread = threading.Thread(target=run_summarization, args=(url, summary_result))
    summarization_thread.start()

    # 创建占位符用于动态更新加载提示
    loading_placeholder = st.empty()

    # 循环更新提示语直到任务完成
    while summarization_thread.is_alive():
        # 用st.info显示带加载图标的提示语
        loading_placeholder.info(f"⏳ {random.choice(loader_messages)}")
        # 每4秒切换一次提示语
        time.sleep(4)
        # 清空占位符准备更新下一条内容
        loading_placeholder.empty()

    # 任务完成后展示结果
    if summary_result:
        st.success("摘要生成完成!")
        st.markdown(f"### 摘要内容\n{summary_result[0]}")

关键细节说明

  1. 后台线程处理耗时任务:将OpenAI API调用放到独立线程中执行,确保Streamlit主线程能持续更新页面内容,不会被长时间阻塞。
  2. 动态占位符更新:用st.empty()创建可复用的页面区域,每隔4秒随机选取提示语并更新,实现动态切换效果。
  3. 线程状态检测:通过thread.is_alive()循环判断任务是否完成,结束后自动切换到结果展示状态。
  4. 输入校验:添加and url逻辑,确保用户输入有效URL后再触发摘要任务,避免空输入导致的报错。

内容的提问来源于stack exchange,提问作者ariXbumaye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:37:02