日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

『玩转Streamlit』--缓存机制

發布時間:2025/3/8 编程问答 28 如意码农
生活随笔 收集整理的這篇文章主要介紹了 『玩转Streamlit』--缓存机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Streamlit 應用在運行時,每次用戶交互都會觸發整個腳本的重新執行。

這意味著一些耗時操作,如數據加載、復雜計算和模型訓練等,可能會被重復執行,嚴重影響應用響應速度。

本文介紹的緩存機制能夠幫助我們解決這些問題,提高Streamlit 應用的性能。

Streamlit緩存機制就像是給應用配備了一個“記憶助手”,它允許開發者將特定函數的計算結果保存下來,當下次相同輸入再次調用該函數時,無需重新執行函數,直接返回緩存結果,極大地提高了應用運行效率,減少等待時間。

1. 為什么需要緩存

Streamlit的機制是每次用戶交互或代碼更改時都會重新運行腳本,這樣就導致了:

  1. 重復計算:長時間運行的函數可能會被多次調用,導致應用響應變慢
  2. 資源浪費:頻繁加載和處理大量數據會消耗大量內存和計算資源
  3. 用戶體驗差:應用加載時間過長,影響用戶交互體驗

為了解決這些問題,Streamlit提供了緩存機制。

緩存機制就像是給應用配備了一個“記憶助手”,它允許開發者將特定函數的計算結果保存下來,當下次相同輸入再次調用該函數時,無需重新執行函數,直接返回緩存結果。

通過緩存函數的輸出結果,避免重復計算,能夠顯著提高應用的性能和響應速度。

2. 兩種緩存裝飾器

Streamlit提供了兩種緩存裝飾器:st.cache_datast.cache_resource,它們的主要區別在于緩存的對象類型和使用場景。

2.1. st.cache_data

st.cache_data是用于緩存數據的裝飾器。

適用于緩存函數的輸出結果,特別是那些返回可序列化數據對象的函數(如 Pandas DataFrameNumPy 數組、字符串、整數等)。

它的主要參數有:

  • ttl:緩存的生存時間(以秒為單位)。超過該時間后,緩存將失效并重新計算。
  • max_entries:緩存中允許的最大條目數。超出該數量時,最舊的緩存條目將被刪除。
  • persist:是否將緩存持久化到磁盤上。默認為False
  • show_spinner:是否顯示加載動畫。默認為True
  • allow_output_mutation:是否允許返回值被修改。默認為False,建議謹慎使用。

2.2. st.cache_resource

st.cache_resource是用于緩存資源的裝飾器。

適用于緩存那些需要初始化但不需要頻繁重新計算的對象,如數據庫連接、模型加載等。

它的主要參數有:

  • ttlmax_entries:與st.cache_data相同。
  • show_spinner:是否顯示加載動畫。默認為True
  • allow_output_mutation:是否允許返回值被修改。默認為False

2.3. 兩者區別總結

st.cache_data st.cache_resource
使用場景 適用于緩存函數的輸出結果,特別是那些返回可序列化數據對象的函數 適用于緩存那些需要初始化但不需要頻繁重新計算的對象,如數據庫連接、模型加載等
特點 緩存的是函數的輸出結果,適合頻繁調用且輸出結果可能變化的場景 緩存的是資源對象本身,適合初始化耗時但不需要頻繁更新的場景
緩存內容示例 從 API 獲取數據、加載 CSV 文件、數據處理等 加載預訓練模型、建立數據庫連接等

3. 緩存使用示例

下面通過示例來演示這兩種緩存裝飾器的使用。

3.1. st.cache_data示例

假設我們有一個應用,需要從API獲取數據并展示給用戶。

由于數據加載可能需要較長時間,我們可以使用st.cache_data來緩存結果。

import streamlit as st
import requests
import pandas as pd # 使用 st.cache_data 緩存數據加載
@st.cache_data(ttl=3600) # 緩存 1 小時
def fetch_data(api_url):
response = requests.get(api_url)
data = response.json()
df = pd.DataFrame(data)
return df # 用戶界面部分
st.title("使用 st.cache_data 緩存數據加載")
api_url = "https://jsonplaceholder.typicode.com/posts"
df = fetch_data(api_url)
st.write(df)

在這個例子中,fetch_data函數被@st.cache_data裝飾器修飾。

第一次調用時,數據會被加載并緩存,后續調用時直接從緩存中讀取,避免重復請求 API

直至1小時后,緩存失效之后才能重新請求。

3.2. st.cache_resource示例

假設我們有一個機器學習應用,需要加載一個預訓練的模型。

由于模型加載可能需要較長時間,我們可以使用st.cache_resource來緩存模型對象。

import streamlit as st
import joblib # 使用 st.cache_resource 緩存模型加載
@st.cache_resource
def load_model(model_path):
model = joblib.load(model_path)
return model # 用戶界面部分
st.title("使用 st.cache_resource 緩存模型加載")
model_path = "path/to/your/model.pkl"
model = load_model(model_path)
st.write("模型已加載,可以進行預測!")

在這個例子中,load_model函數被@st.cache_resource裝飾器修飾。

模型加載后會被緩存,后續調用時直接從緩存中讀取,避免重復加載。

4. 總結

Streamlit的緩存機制通過st.cache_datast.cache_resource提供了強大的性能優化功能。

它們可以幫助開發者減少重復計算、節省資源,并顯著提高應用的響應速度。

在實際開發中,開發者可以根據需求選擇合適的緩存裝飾器:

  • 如果需要緩存函數的輸出結果,使用st.cache_data
  • 如果需要緩存初始化的資源對象,使用st.cache_resource

合理使用緩存機制,可以讓 Streamlit 應用更加高效和流暢,提升用戶體驗。

總結

以上是生活随笔為你收集整理的『玩转Streamlit』--缓存机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。