Callback/hook on a state change

Hey i’m trying implement push notifications on a streamlit app i’m building.

I’m using the python-socketio package to listen for requests.
When a request is caught, i’m setting a state (this worked), and running st.text but is seems that it doesn’t render.
So i’ve tried using st.experimental_rerun() to force rerunning the code and i’m getting this error:

streamlit.runtime.scriptrunner.script_runner.RerunException: RerunData(query_string='', widget_states=None, page_script_hash='db521e67ebfcb7a0b66baf83de044251', page_name='')

Can I fix this ?

Otherwise is there any way to run callbacks on a state change ?

Best,
Roy

1 Like

Got the same problem. Did some websocket listening in a real thread. It updates the streamlit elements, they obviously contain new markdown data (after created initially as .empty()-elements). But the frontend does not rerender.

So I tried to force the rerendering via experimental_rerun() only to get the following error message:

streamlit.runtime.scriptrunner.script_runner.RerunException: RerunData(query_string=‘’, widget_states=None, page_script_hash=‘2d63369e4fdbaafc5fdca7e70a3b52c3’, page_name=‘’).

Streamlit is so nice, but currently I find no way for real concurrent data stream handling without blocking the rerun-cycle (via async.run() which blocks on websocket.recv()) or, by using real threading, did not get the elements updated.