Python應用開發——30天學習Streamlit Python包進行APP的構建(15):優化性能并為應用程序添加狀態

Caching and state

優化性能并為應用程序添加狀態!

Caching

緩存

Streamlit 為數據和全局資源提供了強大的緩存原語。即使從網絡加載數據、處理大型數據集或執行昂貴的計算,它們也能讓您的應用程序保持高性能。 

本頁僅包含有關 st.cache_data API 的信息。如需深入了解緩存及其使用方法,請查閱緩存。

 st.cache_data

裝飾器,用于緩存返回數據的函數(如數據幀轉換、數據庫查詢、ML 推斷)。

緩存對象以 "腌制 "形式存儲,這意味著緩存函數的返回值必須是可腌制的。緩存函數的每個調用者都會獲得自己的緩存數據副本。

您可以使用 func.clear() 清除函數的緩存,或使用 st.cache_data.clear() 清除整個緩存。

要緩存全局資源,請使用 st.cache_resource。有關緩存的更多信息,請訪問 https://docs.streamlit.io/develop/concepts/architecture/caching。

Function signature[source]

st.cache_data(func=None, *, ttl, max_entries, show_spinner, persist, experimental_allow_widgets, hash_funcs=None)

Parameters

func (callable)

The function to cache. Streamlit hashes the function's source code.

ttl (float, timedelta, str, or None)

The maximum time to keep an entry in the cache. Can be one of:

  • None if cache entries should never expire (default).
  • A number specifying the time in seconds.
  • A string specifying the time in a format supported by Pandas's Timedelta constructor, e.g. "1d", "1.5 days", or "1h23s".
  • A timedelta object from Python's built-in datetime library, e.g. timedelta(days=1).

Note that ttl will be ignored if persist="disk" or persist=True.

max_entries (int or None)

The maximum number of entries to keep in the cache, or None for an unbounded cache. When a new entry is added to a full cache, the oldest cached entry will be removed. Defaults to None.

show_spinner (bool or str)

Enable the spinner. Default is True to show a spinner when there is a "cache miss" and the cached data is being created. If string, value of show_spinner param will be used for spinner text.

persist ("disk", bool, or None)

Optional location to persist cached data to. Passing "disk" (or True) will persist the cached data to the local disk. None (or False) will disable persistence. The default is None.

experimental_allow_widgets (bool)

delete

experimental_allow_widgets is deprecated and will be removed in a later version.

Allow widgets to be used in the cached function. Defaults to False. Support for widgets in cached functions is currently experimental. Setting this parameter to True may lead to excessive memory use since the widget value is treated as an additional input parameter to the cache.

hash_funcs (dict or None)

Mapping of types or fully qualified names to hash functions. This is used to override the behavior of the hasher inside Streamlit's caching mechanism: when the hasher encounters an object, it will first check to see if its type matches a key in this dict and, if so, will use the provided function to generate a hash for it. See below for an example of how this can be used.

代碼

import streamlit as st@st.cache_data
def fetch_and_clean_data(url):# 從 URL 獲取數據,然后進行清理。return datad1 = fetch_and_clean_data(DATA_URL_1)
# 實際上執行函數,因為這是第一次遇到它。d2 = fetch_and_clean_data(DATA_URL_1)
# 不執行函數。而是返回之前計算的值。這意味著現在 d1 中的數據與 d2 中的數據相同。d3 = fetch_and_clean_data(DATA_URL_2)
# 這是一個不同的 URL,因此函數會執行。

這段代碼是使用streamlit庫來創建一個web應用程序。代碼中定義了一個名為fetch_and_clean_data的函數,用于從指定的URL獲取數據并進行清理處理。在函數上使用了@st.cache_data裝飾器,表示對函數的結果進行緩存,以便在后續調用時可以直接返回之前計算的數值,而不必重新執行函數。

接下來,代碼分別使用fetch_and_clean_data函數來獲取和清理兩個不同的URL所對應的數據。在第一次調用fetch_and_clean_data時,函數會執行并返回結果,并將結果緩存起來。在后續對相同URL的調用中,函數不會重新執行,而是直接返回之前緩存的結果。當傳入不同的URL時,函數會重新執行以獲取新的數據。

總之,這段代碼展示了如何使用streamlit庫來創建一個具有數據緩存功能的web應用程序,并在多次調用同一個函數時避免重復執行。

設置持續參數的命令如下:

import streamlit as st@st.cache_data(persist="disk")
def fetch_and_clean_data(url):# 從 URL 獲取數據,然后進行清理。return data

這段代碼使用了Streamlit庫,并定義了一個名為fetch_and_clean_data的函數,使用了@st.cache_data(persist="disk")裝飾器。這表示該函數的結果將被緩存,并且可以選擇將緩存持久化到磁盤上。

函數的作用是從指定的URL獲取數據,然后對數據進行清理和處理,最后返回處理后的數據。在實際調用該函數時,如果輸入的URL相同,函數將直接返回緩存中的結果,而不是重新執行獲取和清理數據的操作。

默認情況下,緩存函數的所有參數都必須是散列的。任何名稱以 _ 開頭的參數都不會被散列。對于不可散列的參數,可以將其作為 "逃生艙口":

import streamlit as st@st.cache_data
def fetch_and_clean_data(_db_connection, num_rows):# 從 URL 獲取數據,然后進行清理。return dataconnection = make_database_connection()
d1 = fetch_and_clean_data(connection, num_rows=10)
# 實際執行該函數,因為這是第一次遇到該函數。another_connection = make_database_connection()
d2 = fetch_and_clean_data(another_connection, num_rows=10)
# 不執行函數。相反,即使兩次調用中的 _database_connection 參數不同,也會返回先前計算出的值。

這段代碼是使用Streamlit框架進行數據緩存的示例。在這段代碼中,使用了`@st.cache_data`裝飾器來緩存`fetch_and_clean_data`函數的結果,以便在后續調用中重復使用已經計算過的數值。

首先,通過`make_database_connection`函數建立了一個數據庫連接`connection`,然后調用`fetch_and_clean_data`函數,并傳入`connection`和`num_rows=10`作為參數。由于這是第一次調用該函數,因此實際執行了函數并返回了數據`d1`。

接著,又建立了另一個數據庫連接`another_connection`,然后再次調用`fetch_and_clean_data`函數,并傳入`another_connection`和`num_rows=10`作為參數。由于該函數的結果已經被緩存,所以這次并沒有執行函數,而是直接返回之前計算過的數值,賦值給了`d2`。

這樣,通過數據緩存,可以避免重復執行耗時的數據獲取和清理操作,提高程序的運行效率。

緩存函數的緩存可按程序清除:

import streamlit as st@st.cache_data
def fetch_and_clean_data(_db_connection, num_rows):# 從 _db_connection 抓取數據,然后將其清理干凈。return datafetch_and_clean_data.clear(_db_connection, 50)
# 清除所提供參數的緩存條目。fetch_and_clean_data.clear()
# 清除該函數的所有緩存條目。

這段代碼是使用Streamlit庫來清除緩存數據的示例。首先,使用`@st.cache_data`裝飾器來定義一個函數`fetch_and_clean_data`,該函數可以從數據庫連接中獲取數據并進行清理,然后返回處理后的數據。

接下來,使用`fetch_and_clean_data.clear(_db_connection, 50)`來清除使用指定參數調用函數時緩存的數據條目。這將清除使用給定數據庫連接和行數調用函數時緩存的數據。

然后,使用`fetch_and_clean_data.clear()`來清除該函數的所有緩存條目,而不考慮調用時使用的參數。

這段代碼展示了如何使用Strea

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45227.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

技術成神之路:設計模式(六)策略模式

1.介紹 策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,封裝每一個算法,并使它們可以相互替換。策略模式使得算法的變化獨立于使用算法的客戶端。 2.主要作用 策略模式的主要作用是將算法或行為…

面試問題梳理:項目中防止配置中的密碼泄露-Jasypt

背景 想起面試的時候,面試官問我現在大家用Spring框架,數據庫、ES之類的密碼都是配置在配置文件中的,有很大的安全隱患,你有考慮過怎么解決嘛? 當時我回答是可以在項目啟動的過程中的命令行追加的方式,感覺…

Hello,World!(C++)

題目描述 編寫一個能夠輸出 Hello,World! 的程序。 提示&#xff1a; - 使用英文標點符號&#xff1b; Hello,World! 逗號后面沒有空格。 H 和 W 為大寫字母。 樣例 #1 樣例輸入 #1 無 樣例輸出 #1 Hello,World! &#xff08;1&#xff09; #include<bits/stdc.…

力扣題解( 讓字符串成為回文串的最少插入次數)

1312. 讓字符串成為回文串的最少插入次數 給你一個字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 請你返回讓 s 成為回文串的 最少操作次數 。 「回文串」是正讀和反讀都相同的字符串。 思路&#xff1a; 本題要求的是最少插入次數&#xff0c;…

什么叫圖像的雙邊濾波,并附利用OpenCV和MATLB實現雙邊濾波的代碼

雙邊濾波&#xff08;Bilateral Filtering&#xff09;是一種在圖像處理中常用的非線性濾波技術&#xff0c;主要用于去噪和保邊。它在空間域和像素值域上同時進行加權&#xff0c;既考慮了像素之間的空間距離&#xff0c;也考慮了像素值之間的相似度&#xff0c;從而能夠有效地…

手機怎么看WiFi的IP地址

在如今數字化快速發展的時代&#xff0c;無線網絡已成為我們日常生活中不可或缺的一部分。無論是工作、學習還是娛樂&#xff0c;我們可能都離不開WiFi的陪伴。然而&#xff0c;在使用WiFi的過程中&#xff0c;有時我們可能需要查看其IP地址&#xff0c;以便更好地管理我們的網…

【動態規劃】背包問題 {01背包問題;完全背包問題;二維費用背包問題}

一、背包問題概述 背包問題(Knapsackproblem)是?種組合優化的NP完全問題。 問題可以描述為&#xff1a;給定一組物品&#xff0c;每種物品都有自己的重量和價格&#xff0c;在限定的總重量內&#xff0c;我們如何選擇&#xff0c;才能使得物品的總價格最?。 根據物品的個數…

鏈接追蹤系列-07.logstash安裝json_lines插件

進入docker中的logstash 容器內&#xff1a; jelexbogon ~ % docker exec -it 7ee8960c99a31e607f346b2802419b8b819cc860863bc283cb7483bc03ba1420 /bin/sh $ pwd /usr/share/logstash $ ls bin CONTRIBUTORS Gemfile jdk logstash-core modules tools x-pack …

語音識別概述

語音識別概述 一.什么是語音&#xff1f; 語音是語言的聲學表現形式&#xff0c;是人類自然的交流工具。 圖片來源&#xff1a;https://www.shenlanxueyuan.com/course/381 二.語音識別的定義 語音識別&#xff08;Automatic Speech Recognition, ASR 或 Speech to Text, ST…

基于RAG大模型的變電站智慧運維-第十屆Nvidia Sky Hackathon參賽作品

第十屆Nvidia Sky Hackathon參賽作品 1. 項目說明 變電站是用于變電的設施&#xff0c;主要的作用是將電壓轉化&#xff0c;使電能在輸電線路中能夠長距離傳輸。在電力系統中&#xff0c;變電站起到了極為重要的作用&#xff0c;它可以完成電能的負荷分配、電壓的穩定、容錯保…

電影購票小程序論文(設計)開題報告

一、課題的背景和意義 隨著互聯網技術的不斷發展&#xff0c;人們對于購票的需求也越來越高。傳統的購票方式存在著排隊時間長、購票流程繁瑣等問題&#xff0c;而網上購票則能夠有效地解決這些問題。電影購票小程序是網上購票的一種新型應用&#xff0c;它能夠讓用戶隨時隨地…

06.截斷文本 選擇任何鏈接 :root 和 html 有什么區別

截斷文本 對超過一行的文本進行截斷,在末尾添加省略號(…)。 使用 overflow: hidden 防止文本超出其尺寸。使用 white-space: nowrap 防止文本超過一行高度。使用 text-overflow: ellipsis 使得如果文本超出其尺寸,將以省略號結尾。為元素指定固定的 width,以確定何時顯示省略號…

Selenium WebDriver中的顯式等待與隱式等待:深入理解與應用

在自動化測試中&#xff0c;尤其是在使用Selenium WebDriver進行Web應用的自動化測試時&#xff0c;等待元素加載完成是一個常見的需求。Selenium提供了兩種等待機制來處理這一問題&#xff1a;顯式等待&#xff08;Explicit Wait&#xff09;和隱式等待&#xff08;Implicit W…

筆記 4 :linux 0.11 中繼續分析 0 號進程創建一號進程的 fork () 函數

&#xff08;27&#xff09;本條目開始&#xff0c; 開始分析 copy_process () 函數&#xff0c;其又會調用別的函數&#xff0c;故先分析別的函數。 get_free_page &#xff08;&#xff09; &#xff1b; 先 介紹匯編指令 scasb &#xff1a; 以及 指令 sstosd &#xff1a;…

什么是架構設計師?定義、職責和任務,全方位解析需要具備的專業素質

目錄 1. 架構設計師的定義 2. 架構設計師的職責和任務 2.1 系統架構設計 2.1.1 模塊劃分 2.1.2 接口設計 2.1.3 通信方式 2.2 技術選型與決策 2.2.1 技術評估 2.2.2 技術選型 2.2.3 技術決策 2.3 性能優化與調優 2.3.1 性能分析 2.3.2 性能優化 2.3.3 性能調優 …

基于BitMap的工作日間隔計算

背景問題 在我們實際開發過程中&#xff0c;時常會遇到日期的間隔計算&#xff0c;即計算多少工作日之后的日期&#xff0c;在不考慮法定節假日的情況下也不是那么復雜&#xff0c;畢竟周六、周日是相對固定的&#xff0c;Java語言也提供了豐富的類來處理此問題。 然而&#x…

MVVM和MVC的原理以及它們的區別

MVVM&#xff08;Model-View-ViewModel&#xff09;和 MVC&#xff08;Model-View-Controller&#xff09;是兩種常見的前端架構模式&#xff0c;它們都旨在幫助組織和管理復雜的前端應用程序邏輯和視圖層。 MVC&#xff08;Model-View-Controller&#xff09; 原理&#xff1…

視圖庫對接系列(GA-T 1400)十七、視圖庫對接系列(本級)采集設備獲取

背景 這一章的話,我們寫寫如何獲取采集設備獲取,之前其實也有說過類似的 就我們訂閱的時候如果subscribeDetail=3的話,下級就會主動給我們推送采集設備。但這里的話,是下級主動推,如果下級平臺不支持,或者說可能因為某個原因推的不全,怎么辦? 我們能否主動獲取采集設備…

WPF學習(4) -- 數據模板

一、DataTemplate 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;DataTemplate 用于定義數據的可視化呈現方式。它允許你自定義如何展示數據對象&#xff0c;從而實現更靈活和豐富的用戶界面。DataTemplate 通常用于控件&#xff08;如ListBox、…

知識圖譜和 LLM:利用 Neo4j 實現大型語言模型

這是關于 Neo4j 的 NaLLM 項目的一篇博客文章。這個項目是為了探索、開發和展示這些 LLM 與 Neo4j 結合的實際用途。 2023 年,ChatGPT 等大型語言模型 (LLM) 因其理解和生成類似人類的文本的能力而風靡全球。它們能夠適應不同的對話環境、回答各種主題的問題,甚至模擬創意寫…