【FastAPI 學習筆記 EP.28】背景任務 (Background Tasks)

更新 發佈閱讀 3 分鐘

什麼是背景任務?

BackgroundTasks 是 FastAPI 的內建功能,讓 API 在回傳回應之後,繼續在背景執行耗時的工作,例如寄送通知信、寫入 Log 或更新快取,使用者不需要等待這些操作完成就能收到回應。

BackgroundTasks 基礎語法

  1. 在路由函式的參數中宣告 background_tasks: BackgroundTasks,FastAPI 會自動注入此物件。
  2. 呼叫 background_tasks.add_task(函式名稱, 參數1, 參數2) 將任務加入佇列,會在回應送出後才執行。
  3. 背景任務函式同時支援同步(def)與非同步(async def)兩種寫法。需注意:若使用同步函式執行較耗時的 I/O 操作(如寫入檔案),在高並發情境下仍可能造成執行緒阻塞,建議視情況改用非同步方式處理。
  4. 可在依賴項(Depends)中接收 BackgroundTasks 並新增任務,讓多個路由共用相同的背景邏輯。
import asyncio
from fastapi import FastAPI, BackgroundTasks

app = FastAPI()

def write_log(message: str):
with open("log.txt", "a", encoding="utf-8") as f:
f.write(f"{message}\n")

async def send_email_notification(email: str, subject: str):
await asyncio.sleep(1) # 模擬非同步寄信操作
print(f"已寄送信件至 {email},主旨:{subject}")

@app.post("/orders/")
async def create_order(item_name: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_log, f"新訂單建立:{item_name}")
background_tasks.add_task(
send_email_notification,
"[email protected]",
f"您的訂單《{item_name}》已建立",
)

# 立即回傳,不等待背景任務完成
return {"message": f"訂單《{item_name}》已建立,確認信將於背景寄出"}


留言
avatar-img
梧笙 WuSheng 的沙龍
67會員
33內容數
⛰️ 梧笙,意即「吾生」,我是一個平凡的理工宅男。 生活離不開 Code 與 Game,這裡主要紀錄與分享: 📖 學習筆記|紀錄我學習過的電腦技能與知識。 💻 科技新知|整理實用工具與科技領域的資訊。 🎮 電玩娛樂|聊聊遊戲動漫與實況直播的話題。 目前更新頻率不固定,有興趣歡迎追蹤。
2026/04/26
Pydantic 的 @field_validator 與 @model_validator 裝飾器允許你為模型欄位編寫自訂驗證邏輯。@field_validator 針對單一欄位進行驗證(例如:確認格式、轉換輸入值),@model_validator 則在所有欄位解析完成後運
Thumbnail
2026/04/26
Pydantic 的 @field_validator 與 @model_validator 裝飾器允許你為模型欄位編寫自訂驗證邏輯。@field_validator 針對單一欄位進行驗證(例如:確認格式、轉換輸入值),@model_validator 則在所有欄位解析完成後運
Thumbnail
2026/04/26
CORS 是瀏覽器的安全機制,會自動阻擋網頁向不同「來源」發出的 API 請求。
Thumbnail
2026/04/26
CORS 是瀏覽器的安全機制,會自動阻擋網頁向不同「來源」發出的 API 請求。
Thumbnail
2026/04/26
@app.exception_handler() 是 FastAPI 提供的全域例外攔截機制,讓你針對特定類型的例外統一決定回應格式。這比在每個路由中個別撰寫 try/except 更有效率:只需定義一次,全專案所有路由都自動套用。
Thumbnail
2026/04/26
@app.exception_handler() 是 FastAPI 提供的全域例外攔截機制,讓你針對特定類型的例外統一決定回應格式。這比在每個路由中個別撰寫 try/except 更有效率:只需定義一次,全專案所有路由都自動套用。
Thumbnail
看更多
你可能也想看
Thumbnail
開發生涯,不斷堆加著程式碼,總有那麼一天,只是不經意地修改,卻...突然壞掉了!然後,修很久都修不好。這說明了一件重要的事:專案結構脆弱;隨著認知程度和專案規模的變大,標準也跟著一直提升。而這就是系統要「轉骨」的時候了,為了長治久安,必須進行重構,才能迎接下一階段的成長。以下紀錄我目前的最佳實行。
Thumbnail
開發生涯,不斷堆加著程式碼,總有那麼一天,只是不經意地修改,卻...突然壞掉了!然後,修很久都修不好。這說明了一件重要的事:專案結構脆弱;隨著認知程度和專案規模的變大,標準也跟著一直提升。而這就是系統要「轉骨」的時候了,為了長治久安,必須進行重構,才能迎接下一階段的成長。以下紀錄我目前的最佳實行。
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有說明如何使用uvicorn來啟動FastAPI服務, 假設今天我們的API是一個CPU密集型的運算服務時, 通常我們會希望開啟多個行程來幫忙處理, 那麼大致上的撰寫方式會像這樣: app = FastAPI( ti
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有說明如何使用uvicorn來啟動FastAPI服務, 假設今天我們的API是一個CPU密集型的運算服務時, 通常我們會希望開啟多個行程來幫忙處理, 那麼大致上的撰寫方式會像這樣: app = FastAPI( ti
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢? 首
Thumbnail
當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢? 首
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但開發出來之後, 我們會希望開放給一般使用者使用, 而一般使用者較能夠操作的媒介
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但開發出來之後, 我們會希望開放給一般使用者使用, 而一般使用者較能夠操作的媒介
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但我們除了能開發出應用之外, 也要設計的更人性化一點, API最重要的就是路由了
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但我們除了能開發出應用之外, 也要設計的更人性化一點, API最重要的就是路由了
Thumbnail
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
API是我們與其他系統介接的標準化規格, 那一份好的規格勢必要能夠達到引導與驗證的作用, 避免對方介接錯誤, 引發後續的災難性損失, 因此這一章節就是要教我們如何定義每個API的欄位怎麼填? 資料型態是什麼? 以及如何生成API文件。 我們在「【🔒 Python API框架篇 - Fas
Thumbnail
API是我們與其他系統介接的標準化規格, 那一份好的規格勢必要能夠達到引導與驗證的作用, 避免對方介接錯誤, 引發後續的災難性損失, 因此這一章節就是要教我們如何定義每個API的欄位怎麼填? 資料型態是什麼? 以及如何生成API文件。 我們在「【🔒 Python API框架篇 - Fas
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News