Description
I want to create an app. When user clicks button, the app will create a background task. After a specific time interval, the task is completed. The task will change something and I want this change to auto appear in the UI. Here is a simple example code below.
import streamlit as st
import threading
from streamlit.runtime.scriptrunner import add_script_run_ctx
def task():
st.session_state.counter += 1
# want to auto update the website UI
st.rerun()
if __name__ == "__main__":
st.session_state.counter = 0
if st.button("Click me."):
# do not block the main thread
interval = 3
timer = threading.Timer(3, task)
add_script_run_ctx(timer)
timer.daemon = True
timer.start()
# you can do other things here
st.write("Counter: ", st.session_state.counter)
Question
The code st.rerun()
does not work as expected. I still need to manually rerun in the website.
I want the counter
to update automatically while the main thread remains unblocked.
Can anyone help me?