避免在用户输入更改时重新加载整个 Streamlit 应用程序

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

我一直在尝试在streamlit应用程序中构建多个图,该应用程序使用streamlit.radio为每个图接收多个用户输入(例如:为图X设置阈值,为图Y选择变量等)。尽管该应用程序运行良好,但每次更改任何输入时它都会从头重新加载。由于它体积庞大,我希望仅重新加载那些输入已更改的图表。如何才能做到这一点?虚拟代码可以考虑如下

x = st.radio('',(1,2,3))
plt.bar(a,b,width=x)

y = st.radio('',('left','right'))
plt.bar(a,b,align=y)

现在的问题是,即使我只是更改“y”,应用程序也会重新加载我希望避免的第一个图表。

python data-visualization reload latency streamlit
2个回答
1
投票

0
投票

在此回答:如何避免在用户输入时重新运行完整的 Streamlit 应用程序?

简而言之,Streamlit 最近(1.33.0)发布了 st.experimental_fragment 来解决这个问题。


@st.experimental_fragment
def chart1(a,b) -> None:

    x = st.radio('',(1,2,3))
    plt.bar(a,b,width=x)

@st.experimental_fragment
def chart2(a,b) -> None:
    y = st.radio('',('left','right'))
    plt.bar(a,b,align=y)

chart1(a,b)
chart2(a,b)

在此设置中,与片段(即函数)内的小部件交互只会重新执行该函数。

因此,我不建议从片段返回值,因为它们只会在完整应用程序重新运行时影响应用程序的其余部分。

© www.soinside.com 2019 - 2024. All rights reserved.