[Web] Streamlitのupdateの確認
はじめに
執筆の10時間程前, Streamlitの公式からUpdateのメールが届きました.
私は趣味で麻雀の点数計算アプリを作っており, Streamlit Cloudにアプリケーションをデプロイしている関係で興味があったため内容を確認しました.
Update内容
st.cacheが新しくなり, st.cache_data, st.cache_resourceに分かれた.
-
st.cache_data
データの計算をキャッシュする. 例えば, DataFrameの変形や,NumPy配列の計算, 機械学習モデルの推論など
元々, st.experimental_memoという名前だったようです.
想定される使い方としては
- CSVからロードされたDataFrame
- Numpy配列の変形結果
- APIへのクエリの結果
などが挙げられています.
-
st.cache_resource
共有される資源(global resource)の初期化をキャッシュする. 例えば, データベースとの接続や機械学習モデルなど.
元々, st.experimental_singletonという名前で, Singletonパターン(インスタンスが一つしか生成されないことを保証するデザインパターン)に該当されるもののキャッシュを想定しているようです.
st.cache_resourceによって, アプリケーションのすべての再実行やセッションで, コピーや複製をせずにこれらの資源を共有することができます.
st.cacheを分割した理由
st.cacheが最適化の目標が異なる場所で利用されていたことを挙げています.
例えば, 1であれば, キャッシュされたオブジェクトが変化に対して安全ある必要があります. すなわち関数が使われるときには同じ値が返されることの保証が必要です. そこでst.cacheではオブジェクトに変更があったかコンスタントに確認しています.
しかし, 2であれば毎回確認する必要はないと考えられます. ですが, st.cacheはコンスタントに確認するので実行が遅くなる問題がありました.
この問題を解決するために今回のupdateがあったようです.
アプリケーションの更新
updateがあるパッケージを確認します.
pip list -o
下記のようにStreamlitにupdateがあることを確認しました

今回は沢山updateがあるようなのでpip install package -Uで一つ一つupdateするのはやや大変です. そこでpip-reviewを用いて一括updateします.
pip-review --auto

これでアップデートが出来ました. requirements.txtを更新します.
pip freeze > requirements.txt
これでアプリケーションからデコレータを呼び出し問題が無ければ終了です
Discussion