背景
streamlitを触っているとたまにデータの流れや処理の流れで混乱するのでまとめておきます
基本はこれ
- スクリーン上の何かが更新されたら、Streamlitのスクリプトが再実行されます
- コードが修正された時
- ユーザーがapp上でwidgetsとインタラクトした時
- on_changeやon_clickが呼ばれるとその時点でcallbackが呼ばれます
cacheとsession
sessionとcacheの違い
- cacheは全てのsessionの全てのユーザーに対して利用できる
- sessionはsingle sessionでのに利用できる
chacheとは
sessionとは
- appを見るためのinstance
- 2つのタブからあるappを表示している場合、そのブラウザは2つのsessionを持っている
- ブラウザをリフレッシュしたり、リロードするとsessionはリセットされる
formとは
- 基本入力欄に更新があると、streamlitはスクリプトを上から下まで上から下まで再実行され、アプリのフロントエンドが更新されるが、form内のインプットはsubmitされるまで再実行が走りません
fragmentsとは
- fragmentsを定義すると、再実行するスコープを定義できます
入力欄の実行順序
入力欄に値を入力すると
- st.session_state の値が更新される
- コールバック関数(もしあれば)が実行される
- ページが再実行され、ウィジェット関数が新しい値を返す
コールバックの処理
- コールバック関数はスクリプト再実行の前に実行されます
- コールバック関数が画面に何かを表示する場合、その内容はページの他の部分よりも上に表示されます
- コールバック関数にargs経由で引数を渡す場合は、inputの返り値を渡さない
- 返りが値を持つのは次の再実行時なので、渡したい場合は、st.session_state経由で渡す