【💊 Python的解憂錦囊 - FastAPI】Sharing State讓路由共享資訊

更新於 2024/04/16閱讀時間約 3 分鐘
raw-image


當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢?

首先我們來看看官方的文件:

📄 https://www.starlette.io/applications/#storing-state-on-the-app-instance

raw-image


其中有提到, 我們可以透過「state」來儲存額外的狀態資料, 大致上這樣儲存…

app = FastAPI(...)
app.state.$共享的資料

再來我們可以設計一個函數專門來取狀態內容, 此時的函數命名就可以更直白一點, 未來閱讀實惠更加容易的閱讀。

def get_api_shared_params(connection: HTTPConnection) -> APISharedParams:
"""取得API共享參數

我們的VAD模型或者GPU模型通常需要共用, 而在FastAPI中我們透過 [State狀態](<https://www.vidavolta.io/sharing-memory/>) 來保存與取用,
那麼這邊的函式主要是取得共用參數的部份, 但我們還需要初始化設定參數, 如下:

# Step 1: 設定初始化參數
請使用 [lifespan](<https://fastapi.tiangolo.com/advanced/events/>) 於初始化時進行設定, 實際案例請參考 [main.py](./main.py)

```python
@asynccontextmanager
async def lifespan(app: FastAPI):
api_shared_params ...

app.state.api_shared_params = api_shared_params
```

# Step 2: 各路由注入並取得共用參數
```python
async def xxx(websocket: WebSocket, api_shared_params: APISharedParams = Depends(get_api_shared_params)):
...
```
"""
return connection.app.state.api_shared_params

最後透過依賴注入設置於路由函數之中。

async def xxx(websocket: WebSocket, api_shared_params: APISharedParams = Depends(get_api_shared_params)):

Q&A

那我們要如何在FastAPI的初始時就設置這些共享參數呢?

我們可以藉由 lifespan 來管理整個app的生命週期, 詳細請參考「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期」。

結語

FastAPI真的是一個非常強大的API框架, 基本上我們需要的功能大部分都已經相當完善了, 我們只要照著標準的教學文件即可輕鬆上手, 接下來我們也會陸續的分享關於FastAPI的一些技巧與經驗, 歡迎持續關注我們的頻道, 也非常感謝大家的支持。

avatar-img
116會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。 在進入主題之前, 有一些基本概念務必先行建立, 一個影片是由多張圖片組成的, 因此最小單元為一張圖
當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。 VAD代表
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
本文介紹了Python如何使用websockets進行雙向溝通,包括文字、json、xml和音訊的傳遞。特別著重於json資料交換格式,以及websockets通道的基本流程和關鍵的編碼與解碼。最終談到WebSocket對於傳統同步程式的轉變及對asyncio等套件的重要性。
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
當我們在進行影像處理時, 在Python的世界最常聽到的就是OpenCV, 而我們在處理影片時也會想要僅針對某時間段的影片進行處理, 今天我們就來教您如何透過OpenCV來讀取特定的時間區段。 在進入主題之前, 有一些基本概念務必先行建立, 一個影片是由多張圖片組成的, 因此最小單元為一張圖
當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。 VAD代表
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
本文介紹了Python如何使用websockets進行雙向溝通,包括文字、json、xml和音訊的傳遞。特別著重於json資料交換格式,以及websockets通道的基本流程和關鍵的編碼與解碼。最終談到WebSocket對於傳統同步程式的轉變及對asyncio等套件的重要性。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
維生素是維持身體正常運作所不可或缺的元素,讓我們一同揭密維生素的奧秘。
Thumbnail
在現代醫學中,抗生素扮演著重要的角色,對抗細菌感染、保護我們的身體健康。然而,正確使用抗生素是保護自己和社會免受抗藥性影響的關鍵。一起來了解抗生素的基本知識,從使用時機到副作用,提供您全方位的了解。 💡
Thumbnail
我們將探索函式的定義和調用,這是程式設計中非常重要且強大的概念,它可以將大型程式切割成小的、可重複使用的函式。讓我們一起來了解吧!函式的定義、呼叫和返回值是學習函式的核心。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
經濟是國家的命脈,社稷重點無可厚非,國際情勢不好、經濟危機出現時,國家資源救市,穩定法人、投資人信心,維持正常的金融機轉,讓國家度過危機,👍值得嘉許,只是這次國安基金護盤的故事,讓人百般尋味。 台股去年創下18650破紀錄新高,隨著國際局勢一起回檔,國安基金決定進場護盤: 第一:當時股市萬八,不是
Thumbnail
在最近動盪的銀行冒險記裡,開始出現銀行倒閉的新聞,或是接近倒閉被接管,💣一個個炸彈,在主政者的輔助下,細細呵護的灌溉、包紮,給予營養補給,🇺🇸美洲的銀行危機,暫時告一段落。 後來出現了另一個危機,CS瑞士信貸,不是CS絕對武力,Credit Suisse,規模同比有過之而無不及,好像一顆加大的
Thumbnail
這一年來,得到最大的收穫就是「做自己」! 最浪費時間的事是什麼呢?就是拿自己和別人比較🥹 嘿親愛的,我們都是獨特且美麗的存在❤️
Thumbnail
今天的領受是在上個禮拜每週五都會去上的照顧者關懷工作坊, 課中領受到的!! (哈哈只剩下禮拜最後一堂課了) 感謝主也可以給我些思考, 和這個領受❤️🤗 這週應該算是課堂裡 塞最多內容的一課了, 哈哈我後來都有點精神渙散想睡了🤣 辛苦老師了!!! 主要講到兩個主題: 步向正面思考、一些用藥知識 和
Thumbnail
第一家公司產品的由專業團隊設計和研發的,因此品質得到保證。提供豐富的資源,包括在線健康諮詢服務和健康資訊,幫助顧客了解如何使用產品和實現健康目標。該公司的產品具有良好的可負擔性。通過線上購買,顧客可以輕鬆訂購所需的產品,並且該公司的價格也相對實惠。
《女性性需求第一定律》 為什麼有些女生總是會把性行為這件事無限往後延? 今天史提將從紅藥丸演化博弈心理學的角度 ,來探討一下這個問題🤨 想像你是一個妹子,有一個男的每天照三餐都會給妳鮮花素果🍉🍑🥝因為他想追妳,妳能有的選項: 1.跟他交往並啪啪啪🤨 2.不跟他交往也不啪啪啪🤔 = ;
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
維生素是維持身體正常運作所不可或缺的元素,讓我們一同揭密維生素的奧秘。
Thumbnail
在現代醫學中,抗生素扮演著重要的角色,對抗細菌感染、保護我們的身體健康。然而,正確使用抗生素是保護自己和社會免受抗藥性影響的關鍵。一起來了解抗生素的基本知識,從使用時機到副作用,提供您全方位的了解。 💡
Thumbnail
我們將探索函式的定義和調用,這是程式設計中非常重要且強大的概念,它可以將大型程式切割成小的、可重複使用的函式。讓我們一起來了解吧!函式的定義、呼叫和返回值是學習函式的核心。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
經濟是國家的命脈,社稷重點無可厚非,國際情勢不好、經濟危機出現時,國家資源救市,穩定法人、投資人信心,維持正常的金融機轉,讓國家度過危機,👍值得嘉許,只是這次國安基金護盤的故事,讓人百般尋味。 台股去年創下18650破紀錄新高,隨著國際局勢一起回檔,國安基金決定進場護盤: 第一:當時股市萬八,不是
Thumbnail
在最近動盪的銀行冒險記裡,開始出現銀行倒閉的新聞,或是接近倒閉被接管,💣一個個炸彈,在主政者的輔助下,細細呵護的灌溉、包紮,給予營養補給,🇺🇸美洲的銀行危機,暫時告一段落。 後來出現了另一個危機,CS瑞士信貸,不是CS絕對武力,Credit Suisse,規模同比有過之而無不及,好像一顆加大的
Thumbnail
這一年來,得到最大的收穫就是「做自己」! 最浪費時間的事是什麼呢?就是拿自己和別人比較🥹 嘿親愛的,我們都是獨特且美麗的存在❤️
Thumbnail
今天的領受是在上個禮拜每週五都會去上的照顧者關懷工作坊, 課中領受到的!! (哈哈只剩下禮拜最後一堂課了) 感謝主也可以給我些思考, 和這個領受❤️🤗 這週應該算是課堂裡 塞最多內容的一課了, 哈哈我後來都有點精神渙散想睡了🤣 辛苦老師了!!! 主要講到兩個主題: 步向正面思考、一些用藥知識 和
Thumbnail
第一家公司產品的由專業團隊設計和研發的,因此品質得到保證。提供豐富的資源,包括在線健康諮詢服務和健康資訊,幫助顧客了解如何使用產品和實現健康目標。該公司的產品具有良好的可負擔性。通過線上購買,顧客可以輕鬆訂購所需的產品,並且該公司的價格也相對實惠。
《女性性需求第一定律》 為什麼有些女生總是會把性行為這件事無限往後延? 今天史提將從紅藥丸演化博弈心理學的角度 ,來探討一下這個問題🤨 想像你是一個妹子,有一個男的每天照三餐都會給妳鮮花素果🍉🍑🥝因為他想追妳,妳能有的選項: 1.跟他交往並啪啪啪🤨 2.不跟他交往也不啪啪啪🤔 = ;