docs icon indicating copy to clipboard operation
docs copied to clipboard

Add documentation about how to use Streamlit with multiple threads.

Open tvst opened this issue 6 years ago • 8 comments

TLDR: you either need to use the ReportThread class for your thread, or call add_report_ctx on your thread after creation

tvst avatar Sep 10 '19 22:09 tvst

@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 :/

mansidak avatar Feb 26 '23 21:02 mansidak

@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 :/

Now you need to use from streamlit.runtime.scriptrunner import add_script_run_ctx https://github.com/streamlit/streamlit/issues/1326

dpinol avatar Jun 29 '23 09:06 dpinol

"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 avatar Jul 19 '23 06:07 MoritzNekolla

@MoritzNekolla Why am I getting "TypeError: Protocols cannot be instantiated" any clue?

VEADER1005 avatar Jul 21 '23 05:07 VEADER1005

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.

MoritzNekolla avatar Jul 21 '23 06:07 MoritzNekolla

What should be in the document then? I have a few arguable points though:

  1. explain how is user's code executed in absence of custom threads (if it's not introduced elsewhere)
  2. ScriptRunContext, its lifetime, and the missing ScriptRunContext warning
  3. how to do custom threading without ScriptRunContext
  4. 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.

jokester avatar Jul 31 '24 08:07 jokester

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.

msabramo avatar Sep 16 '24 17:09 msabramo

Created https://github.com/streamlit/docs/pull/1154 to document the custom threading stuff (based on my understanding and limited experience)

jokester avatar Sep 18 '24 14:09 jokester