In a Streamlit app, I need to perform a time expensive operation, which depends on some parameters the user chooses (with sliders).
Because this operation is expensive, I want to do it only when the user click on a button to perform it (and because the operation depends on multiple parameters, the user might want to redo the operation multiple times).
Because there are multiple parameters, I also don’t really want to cache the function and recompute it every time one parameter changes. In this case, if a user wants to change 10 parameters, Streamlit will try to redo the expensive operation every time a slider changes, which will make it super slow.
A simple code to illustrate my idea is the following:
import streamlit as st x = 0 y = None def f(x): "Imagine a time expensive function here" y = x + 1 return y compute_button = st.button("Compute y") if compute_button: y = f(x) print(y) clicked = st.button("Click me")
At the beginning,
When I click on the
y is now 1, but as soon as I click on another button (for example
y goes back to
And I need to click other buttons after performing the expensive operation.
Do you have any idea or workaround for this?
I saw workarounds using a checkbox instead of a button, but I think it wouldn’t fit my case.
Thanks in advance