streamlit으로 변수 상태 유지
이 기사는 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 appdocker 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
를 초기화합니다.이 때 참조_SessionState
count 변수의 상태state.count
를 저장하여 응용 프로그램의 이벤트 발생과 초기화를 방지합니다.다음은 응용 프로그램 코드에서 상태를 관리하고자 하는 변수
state
입니다. 참조하면 다음과 같은 상태가 유지됩니다.끝맺다
streamlit으로 변수 상태를 관리하는 방법을 소개했다.
streamlit는 매우 편리하지만 사용에 있어서 그의 행동을 이해하고 무엇을 할 수 있는지 무엇을 할 수 있는지 아는 것이 중요하다.(임의의 일이라고도 할 수 있다)
그럼
Reference
이 문제에 관하여(streamlit으로 변수 상태 유지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/irisu-inwl/items/140b260eb7918fc09c8e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)