iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0

終於完賽啦!

這系列文章原本是想說要圍繞著 AI 服務去做撰寫,盡可能把開發 AI 應用服務所需要掌握的技術與知識分享給大家。但寫著寫著,又覺得好像 AI 的部分也不是很多,反而比較像是 FastAPI 通用的教學 (但又沒那麼基礎XD),想來想去,就還是維持原本所設想的主題了。

回顧

這系列文章分成 3 個篇章:

基礎篇 (Day 02 - 13)

這是花最多天討論的篇章了!為了能順暢地解釋 def 與 async def,前面花了 5 天 (03 - 07) 來把一些 Python 基礎的觀念給介紹一遍。接著,就是介紹協定 (WSGI、ASGI) 與伺服器,再帶到只有 ASGI 才有的 Lifesapn。最後,就是很常會使用到的 StreamingResponse。

進階篇 (Day 14-23)

有了前面的基礎知識後,就可以開始介紹一些我覺得比較進階一點的東西。

DB 的部分算是快速帶過而已,主要是想提一下非同步的操作而已。接著就是比較重要的任務管理,從基本的 Background Task,再到稍微複雜一點的 Thread Pool,最後是最複雜但也最實用的任務佇列,並提供一個簡單的 Celery 範例來讓大家知道任務佇列的厲害之處。

既然有任務,就免不了需要去思考發生錯誤時的對應處理,避免造成服務的中斷,同時也要提供一點資訊或留下點紀錄,讓開發者或是使用者可以知道到底發生了什麼。此外,如果這些任務需要花費較長時間才能完成,那麼讓前端知道任務進度也是一件很重要的事情。

應用篇 (Day 24-29)

在這個篇章,舉了幾個我在公司有遇過的且覺得常見的需求,希望透過簡單的範例,來分享應該怎麼去建構這樣的服務。當然,這是簡化許多的版本,實際需求往往複雜很多,不過,還是希望各位能從這些範例,學會如何把各種 FastAPI 相關的功能組合起來,搭建出你們所想要的服務~

問題

最後,讓我們回過頭來看一下我們在 Day 01 所提到的問題,不知道各位是否已經知道該怎麼回答這些問題了XD

  1. def 與 async def 差別在哪裡? 什麼時候用 def? 什麼時候用 async def?
  2. WSGI 是什麼? ASGI 是什麼?
  3. 在部屬時,uvicorn 與 gunicorn 各自的功能是什麼? 有其他選擇嗎?
  4. 如果有耗時的任務,該怎麼處理?
  5. 有些函數需要先初始化 (e.g. 載入 AI 模型),該怎麼處理?
  6. 長時間的任務怎麼讓前端知道進度? 後端怎麼通知前端?

這系列文章應該都有涵蓋到這些問題,因此我就不提供答案了 (⁰▿⁰)

心得

今年是第三年參加了,原本期待今年也會有 Python 組,沒想到只出現去年一次而已,所以只好改成參加這個超熱門的 Software Development 組。

我覺得寫鐵人賽文章最有趣的地方是在想題目和規劃架構。主題太大會寫不完,太小的話一下就沒梗了;內容太獨立的話,會覺得前後沒有連貫,不像是同一個系列的文章;內容太相近的話,又會覺得應該放在同一天。8 月真的花了很多時間思考如何切分內容、怎麼安排順序。

另外,我覺得 Roadmap 也是很有趣的東西。這個東西到底有沒有用我其實也不知道,但有一個圖形化的目錄看了就比較舒服。原本是想要做的跟技能樹一樣 (必須先把基礎技能點起來,才能點進階技能),也想要做的跟主線支線任務一樣 (知道哪些是必須要會的,哪些是錦上添花的)。但實際規劃後,覺得實在很難畫出完美的圖,就變成現在這個樣子了,希望之後有機會可以畫出我心目中完美的 roadmap XD

這次參賽,重新整理我對 FastAPI 的認識,也順便把以前沒好好搞清楚的東西給弄懂了。最後,如果大家對文章內容有疑問,歡迎大家來討論~

希望這系列的文章有幫助到大家~


上一篇
[Day 29] 容器化與部屬
系列文
用 FastAPI 打造你的 AI 服務30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言