依次显示各种/随机加载消息

问题描述 投票:0回答:1

我正在使用 OpenAI API 构建内容摘要服务。然而,加载时间太长了,所以我认为显示带有一些“有趣”加载器消息的加载器圆圈会很酷。

我使用streamlit作为服务,这样我只需要指定一些app.py文件(至少这是我所做的)。 Streamlit 文档 非常简单,但该服务在 UI 方面也有限制。然而,这是我得到的:

import streamlit as st
import random

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

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

url = st.text_input

loader_messages = ["string 1", "string 2", "string 3", "string 4"]

if st.button("Summarize"):
    with st.spinner(random.choice(loader_messages)):
        ...

我将

st.spinner
与我指定的
loader_messages
中的随机选择集成在一起。东西可以工作,但由于我的加载时间有时约为 15 秒,我想每 4 秒随机渲染一条加载器消息。

我在网上搜索,但到目前为止还没有找到任何可以提供简单Python解决方案的东西(我的期望是一些很酷的函数,它允许随机打印持续时间为4秒的字符串,直到加载过程结束)完成)。

python random streamlit loader
1个回答
0
投票

您可以通过多重处理来完成。它进行繁重的计算,同时您可以处理旋转器(我用带有 ⏳ 表情符号的简单字符串替换了旋转器,因为我使用

st.empty
而不是
st.spinner
)。

import multiprocessing
import random
import time

import streamlit as st

def heavy_computation():
    for _ in range(20):
        time.sleep(1)

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

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

loader_messages = ["string 1", "string 2", "string 3", "string 4"]

if st.button("Summarize"):
    p1 = multiprocessing.Process(target=heavy_computation)
    p1.start()

    # Handle the "spinner" part
    placeholder = st.empty()
    while True:
        if not p1.is_alive():  # This checks that the heavy_computation function has finished doing its work
            break
        message = random.choice(loader_messages)
        placeholder.text(f"⏳ {message}")
        time.sleep(4)

    p1.join()

    # This removes the last loader message displayed.
    placeholder.empty()

    st.write("✅ Heavy computation finished!")
© www.soinside.com 2019 - 2024. All rights reserved.