我正在使用 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秒的字符串,直到加载过程结束)完成)。
您可以通过多重处理来完成。它进行繁重的计算,同时您可以处理旋转器(我用带有 ⏳ 表情符号的简单字符串替换了旋转器,因为我使用
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!")