No project description provided
Project description
streamlit-server-state
A "server-wide" state shared across the sessions.
import streamlit as st
from streamlit_server_state import server_state, server_state_lock
st.title("Global Counter Example")
with server_state_lock["count"]: # Lock the "count" state for thread-safety
if "count" not in server_state:
server_state.count = 0
increment = st.button("Increment")
if increment:
with server_state_lock.count:
server_state.count += 1
decrement = st.button("Decrement")
if decrement:
with server_state_lock.count:
server_state.count -= 1
st.write("Count = ", server_state.count)
As above, the API is similar to the built-in SessionState, except one major difference - a "lock" object. The lock object is introduced for thread-safety because the server-state is accessed from multiple sessions, i.e. threads.
Auto-rerun
When you assign a value to a server-state item, server-state[key]
,
server-state automatically triggers re-running of all other sessions in which that server-state item is referred to so that all the references to the server-state return the latest value and all the sessions are kept up-to-date.
For example, with this mechanism, the sample chat app (app_chat.py
) keeps showing the latest message list for all users.
Suppressing auto-rerun
When this auto-rerun mechanism is not good for your use case, you can suppress auto-reruns upon the value assignments by using no_rerun
context as below.
from streamlit_server_state import server_state, no_rerun
with no_rerun:
server_state["foo"] = 42 # This does not trigger re-running of other sessions
Manually trigger re-running
Upon each value assignment, server-state checks whether the value has been changed and skips re-running if it has not for efficiency. This works well in most cases, but it does not for example when the value is a complex mutable object and its field is mutated, while such usages are not recommended.
As exceptions, in such cases where the auto-rerun mechanism does not work well, you can manually trigger re-running by using force_rerun_bound_sessions(key)
.
if "foo" not in server_state:
server_state["foo"] = SomeComplexObject()
server_state["foo"].field = 42 # If this assignment does not trigger re-running,
force_rerun_bound_sessions("foo") # You can do this.
Examples
app_global_count
: A sample app like the official counter example for SessionState which usesstreamlit-server-state
instead and the counter is shared among all the sessions on the server. This is a nice small example to see the usage and behavior ofstreamlit-server-state
. Try to open the app in multiple browser tabs and see the counter is shared among them.app_global_slider
: A slider widget (st.slider
) whose value is shared among all sessions.app_chat.py
: A simple chat app usingstreamlit-server-state
.app_chat_rooms.py
: A simple chat app with room separation.
Resources
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for streamlit_server_state-0.16.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9fd43199c7fe1bea9437e447c7e117423ad6eca9607327eeeb09a5c079d2120 |
|
MD5 | ee8b1683280743ff295e658829001241 |
|
BLAKE2b-256 | 002a7978e1a627cae2e70cab1cfc99a86b60edf5d3a35f71d6537fa6b4ab40ac |
Hashes for streamlit_server_state-0.16.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9b76d7da2991068d0ddffa1af6c403fba08492b7becef68ceb82d5b62668fb6 |
|
MD5 | e01273b80fa8f41ac82d40cf04bf44b2 |
|
BLAKE2b-256 | c78e58e12398892ee66041e4e969380a733cb398068e5b18d099ce222f2aa7c3 |