docs
docs copied to clipboard
Add documentation about how to use Streamlit with multiple threads.
TLDR: you either need to use the ReportThread class for your thread, or call add_report_ctx on your thread after creation
@tvst @randyzwitch I still can't figure out a clear way to import Report Threads. Like others have said, using from streamlit.ReportThread import add_report_ctx only leads to an error saying that this module doesn't exist :/
@tvst @randyzwitch I still can't figure out a clear way to import Report Threads. Like others have said, using
from streamlit.ReportThread import add_report_ctxonly leads to an error saying that this module doesn't exist :/
Now you need to use from streamlit.runtime.scriptrunner import add_script_run_ctx https://github.com/streamlit/streamlit/issues/1326
"TLDR: you either need to use the ReportThread class for your thread, or call add_report_ctx on your thread after creation"
But why is the code snippet below not working. Could you explain how to get that to run @tvst or @dpinol ?
import time
import streamlit as st
from threading import Thread
from streamlit.runtime.scriptrunner import add_script_run_ctx
def target():
time.sleep(1)
st.text("thread")
t = Thread(target=target)
add_script_run_ctx(t)
t.start()
@MoritzNekolla Why am I getting "TypeError: Protocols cannot be instantiated" any clue?
Why am I getting "TypeError: Protocols cannot be instantiated" any clue?
This is caused by python 3.9.7. Try upgrad/downgrade your python version.
What should be in the document then? I have a few arguable points though:
- explain how is user's code executed in absence of custom threads (if it's not introduced elsewhere)
ScriptRunContext, its lifetime, and themissing ScriptRunContextwarning- how to do custom threading without
ScriptRunContext - how to do custom threading with
ScriptRunContext
3 and 4 are separated because I don't think add_script_run_ctx(my_thread) is the go-to fix for missing ScriptRunContext. If I read the code correctly a ScriptRunContext is created for a script run, and contains session-specific binding like UserInfo UploadedFileManager. Using it indifferently can cause memory leak or security issue.
This is issue 87, was created in 2019, and it's still open? Were these docs added and perhaps the issue was never closed? I ended up here, because I upgraded a library that we use and that library is using threading and now my Streamlit app logs are filled with this message:
missing ScriptRunContext! This warning can be ignored when running in bare mode.
Created https://github.com/streamlit/docs/pull/1154 to document the custom threading stuff (based on my understanding and limited experience)