🐍

[Web] Streamlitのupdateの確認

2023/02/18に公開

はじめに

執筆の10時間程前, Streamlitの公式からUpdateのメールが届きました.
私は趣味で麻雀の点数計算アプリを作っており, Streamlit Cloudにアプリケーションをデプロイしている関係で興味があったため内容を確認しました.

Update内容

st.cacheが新しくなり, st.cache_data, st.cache_resourceに分かれた.

  1. st.cache_data
    データの計算をキャッシュする. 例えば, DataFrameの変形や,NumPy配列の計算, 機械学習モデルの推論など

元々, st.experimental_memoという名前だったようです.

想定される使い方としては

  • CSVからロードされたDataFrame
  • Numpy配列の変形結果
  • APIへのクエリの結果

などが挙げられています.

  1. 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

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

pip-review --auto

updated

これでアップデートが出来ました. requirements.txtを更新します.

pip freeze > requirements.txt

これでアプリケーションからデコレータを呼び出し問題が無ければ終了です

参考文献

  1. Tim Conkling, Karen Javadyan and Johannes Rieke. "Introducing two new caching commands to replace st.cache!"
    . Streamlit. February 14 2023

Discussion