streamlit으로 변수 상태 유지

6587 단어 StreamlitPython
※ 주의
이 기사는 stream lit version 0.84.0 이전의 기사입니다.
Streamlit version 0.84.0에서 Session State 기능이 출시되므로 이 기사처럼 Session 관리를 자체적으로 수행할 필요가 없습니다.
자세한 내용은 공식 문서 참조: https://docs.streamlit.io/en/stable/add_state_app.html
안녕하세요.
streamlit를 사용할 때 그 행위의 특수성에 대해 자주 고민한다.
이번에는 변수의 상태 유지가 어떻게 실현되는지에 대해 쓴다.
github: https://github.com/irisu-inwl/streamlit-state-test

현상.


단추를 누르면count를 증가하고,count를 줄일 수 있는 프로그램을 만들 수 있습니다.
아래와 같이 코드의 첫 번째 실행은 성공했고 이후에 버튼을 눌러도 변수+1-1에서 이동하지 않았다.
import streamlit as st


def main():
    st.title('Counter App')
    count = 0
    increment_count = st.button('count +')
    decrement_count = st.button('count -')
    if increment_count:
        count += 1
    if decrement_count:
        count -= 1

    st.write(f'count: {count}')


if __name__ == '__main__':
    main()
run app
docker run -itd -v $(pwd)/src:/opt/streamlit/src -p 8080:8501 --name streamlit-state streamlit-state streamlit run src/wrong_app.py
결과:

streamlit의 실행 순서


streamlit의 실행 순서를 복습합니다.
streamlit의 공식 문서에서 streamlit의 행위는 응용 프로그램의rendering 후 사용자가 일으킨 이벤트에서 스크립트를 다시 실행합니다.
따라서 버튼count = 0을 눌렀을 때마다 변수가 초기화되어 +1,-1의 상태가 된다.

참조 소스:

처리하다.


그렇다면 어떻게 변수의 상태를 유지합니까? 다음stream lit community의 글에는 세션 상태를 관리하는 방법이 기술되어 있습니다.
참조 코드 중의 _SessionState류를 이용하여 아까의 응용을 다음과 같이 개선했다.
import streamlit as st
from src.session import _get_state


state = _get_state()

if state.count == None:
    state.count = 0


def main():
    st.title('Counter App')

    increment_count = st.button('count +')
    decrement_count = st.button('count -')
    if increment_count:
        state.count += 1
    if decrement_count:
        state.count -= 1

    st.write(f'count: {state.count}')


if __name__ == '__main__':
    main()
먼저 _SessionState류, _get_state(), _get_session()session.py에 썼다.( 이런 느낌. )
그리고 응용 프로그램을 실행할 때count를 초기화합니다.이 때 참조_SessionStatecount 변수의 상태state.count를 저장하여 응용 프로그램의 이벤트 발생과 초기화를 방지합니다.
다음은 응용 프로그램 코드에서 상태를 관리하고자 하는 변수state입니다. 참조하면 다음과 같은 상태가 유지됩니다.

끝맺다


streamlit으로 변수 상태를 관리하는 방법을 소개했다.
streamlit는 매우 편리하지만 사용에 있어서 그의 행동을 이해하고 무엇을 할 수 있는지 무엇을 할 수 있는지 아는 것이 중요하다.(임의의 일이라고도 할 수 있다)
그럼

좋은 웹페이지 즐겨찾기