【MLOps - Airflow 疑難雜症】別讓任務跑到天荒地老 - Timeout 終極設定指南

更新 發佈閱讀 4 分鐘

🧵 一個小故事

在某個星期六的清晨,工程師小明被監控的訊息吵醒, Airflow 上的任務居然跑了 16 個小時還沒結束!

原來是某支資料轉換腳本卡在網路重連邏輯中,無限重試,一路跑進週末。

這時候小明邊泡咖啡邊想: 「要是早點加上 timeout,就不用週末加班了...」。

🧠 為什麼需要 timeout?

  • 防止任務卡住不結束(ex: 死循環、等待外部系統)。
  • 提高資源使用效率(避免佔用 executor slot)。
  • 提升排錯與監控效率(SLA 警示 + 自動重試)。

✅ 常見四種過期控制方法

1. execution_timeout(最推薦)

針對單一任務設定最長執行時間,超時會自動失敗:

from airflow.decorators import task
from datetime import timedelta

@task(execution_timeout=timedelta(minutes=5))
def extract_data():

2. 使用 default_args 統一設定所有任務 timeout

若你的 DAG 中任務數量多、結構一致,建議使用 default_args:

default_args = {
'execution_timeout': timedelta(minutes=15),
...
}

with DAG(
dag_id='daily_etl_pipeline',
default_args=default_args,
...
) as dag:
...

3. 設定 SLA(延遲通知,不會強制中止任務)

若想追蹤任務是否「在可接受時間內完成」,但不想強制 timeout,可以用 SLA:

@task(sla=timedelta(minutes=30))
def load_data():
...

SLA 可搭配 email、Slack 或 callback function 做延遲警示,不會終止任務執行。

4. 限制整個 DAG Run 的執行時間

有時候你想限制整條流程(DAG)不得超過某個時間,例如每日 ETL 最晚要在 2 小時內跑完:

DAG(
dag_id='hourly_summary',
dagrun_timeout=timedelta(hours=2),
...
)

💡 加值技巧

  • 若加上 execution_timeout 的任務容易 timeout,可配合 retries + retry_delay 自動重試。
  • 若是外部系統導致 delay,可考慮加入 timeoutretry 參數在 API call 裡面(例如 requests 或 SQL hook)。
  • 若要明確中止某任務,可加上 on_failure_callback 做通知或補償行為。

✅ 總結表格

raw-image


結語

記得幫每個你「不確定會多久」的任務,加上 execution_timeout, 這不只是為了穩定系統,也是為了讓週末的你,可以安心睡覺 😴。

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
139會員
303內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/06/18
Common Voice 是 Mozilla 發起的一個開源專案,目的是建立一個大型、公開、自由可用的語音資料庫,讓任何人(尤其是研究人員、開發者、公司)都可以用來訓練語音辨識、語音合成(TTS)等人工智慧應用。 很幸運的, Common Voice也將原始碼提供給大家使用, 在 🔍 h
Thumbnail
2025/06/18
Common Voice 是 Mozilla 發起的一個開源專案,目的是建立一個大型、公開、自由可用的語音資料庫,讓任何人(尤其是研究人員、開發者、公司)都可以用來訓練語音辨識、語音合成(TTS)等人工智慧應用。 很幸運的, Common Voice也將原始碼提供給大家使用, 在 🔍 h
Thumbnail
2025/06/11
關於Airflow是什麼, 歡迎參考「🔒 阿Han的軟體心法實戰營 - MLOps」, 在開始之前我們也推薦以下兩篇給您閱讀: 【🔒 MLOps - Airflow】使用docker compose架設Airflow 【🔒 MLOps - Airflow】使用DAG流程呼叫Docker O
Thumbnail
2025/06/11
關於Airflow是什麼, 歡迎參考「🔒 阿Han的軟體心法實戰營 - MLOps」, 在開始之前我們也推薦以下兩篇給您閱讀: 【🔒 MLOps - Airflow】使用docker compose架設Airflow 【🔒 MLOps - Airflow】使用DAG流程呼叫Docker O
Thumbnail
2025/05/14
當我們在開發AI應用程式的時候, 常常會使用到onnx, ONNX 是一種開放標準格式,允許不同深度學習框架(如 PyTorch、TensorFlow、Scikit-learn)之間互通,使模型可以在不同平台上運行,而 ONNX Runtime 則是一個高效能的推理引擎,專門用來加速 ONNX
Thumbnail
2025/05/14
當我們在開發AI應用程式的時候, 常常會使用到onnx, ONNX 是一種開放標準格式,允許不同深度學習框架(如 PyTorch、TensorFlow、Scikit-learn)之間互通,使模型可以在不同平台上運行,而 ONNX Runtime 則是一個高效能的推理引擎,專門用來加速 ONNX
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
紀錄時間2024/07/30
Thumbnail
紀錄時間2024/07/30
Thumbnail
紀錄時間2024/07/23
Thumbnail
紀錄時間2024/07/23
Thumbnail
紀錄時間2024/07/17
Thumbnail
紀錄時間2024/07/17
Thumbnail
有時候巴不得一天有72小時……所以在時間的分配上,必須每一分每一秒都算得剛剛好才行。 嗨,各位好我是出雲,我們又見面了! 上回結尾時提到,我是在「新冠疫情」爆發下,才有了重新審視自己的機會。 (只可惜該工作還是得工作) 出雲我目前現職為遊戲企劃、偶爾兼個差,有時候巴不得一天有72
Thumbnail
有時候巴不得一天有72小時……所以在時間的分配上,必須每一分每一秒都算得剛剛好才行。 嗨,各位好我是出雲,我們又見面了! 上回結尾時提到,我是在「新冠疫情」爆發下,才有了重新審視自己的機會。 (只可惜該工作還是得工作) 出雲我目前現職為遊戲企劃、偶爾兼個差,有時候巴不得一天有72
Thumbnail
突然有很多時間以後,仍覺得時間很不夠用。 當社畜的時候,每天6點起床,弄好早餐趕小孩起床,七點出門,送孩子到學校後又塞車晃晃晃到公司。早上忙忙忙等午餐,午睡後忙忙茫等下午茶,茫茫茫接著等下班。回家趕做家事,趕小孩洗澡睡覺,趕追劇,趕12點睡覺。日復一日,年復一年,每天都覺得快轉,時間不夠用。
Thumbnail
突然有很多時間以後,仍覺得時間很不夠用。 當社畜的時候,每天6點起床,弄好早餐趕小孩起床,七點出門,送孩子到學校後又塞車晃晃晃到公司。早上忙忙忙等午餐,午睡後忙忙茫等下午茶,茫茫茫接著等下班。回家趕做家事,趕小孩洗澡睡覺,趕追劇,趕12點睡覺。日復一日,年復一年,每天都覺得快轉,時間不夠用。
Thumbnail
今天是連續第60日的日更,明起暫停,調整發文方式。 原先在日常的運轉中,一直想盡各種方式要維持日更的原因是:深知自己一旦停下來或者幫自己放水之後,就很難再維持或者重新進入到一個有紀律的輸出狀態。 甚至,在遇到周末或者節假日整天不在家裡時,還會預設排程,維持每日發文。 不過,如果以第一性原理回頭
Thumbnail
今天是連續第60日的日更,明起暫停,調整發文方式。 原先在日常的運轉中,一直想盡各種方式要維持日更的原因是:深知自己一旦停下來或者幫自己放水之後,就很難再維持或者重新進入到一個有紀律的輸出狀態。 甚至,在遇到周末或者節假日整天不在家裡時,還會預設排程,維持每日發文。 不過,如果以第一性原理回頭
Thumbnail
自然安排的事情其實很多,不斷地發生,只是懶得寫。昨天的2件事比較明顯,那就來寫一下好了。   一、開始了想了很久的超慢跑   昨天吃完早餐,坐下來開電腦。開得有點慢,然後每個動作都很慢,甚至不動,幾分鐘後我決定重開機,將網頁和檔案都關掉,重開機,這是我這幾年碰到電腦很慢時的做法。   重
Thumbnail
自然安排的事情其實很多,不斷地發生,只是懶得寫。昨天的2件事比較明顯,那就來寫一下好了。   一、開始了想了很久的超慢跑   昨天吃完早餐,坐下來開電腦。開得有點慢,然後每個動作都很慢,甚至不動,幾分鐘後我決定重開機,將網頁和檔案都關掉,重開機,這是我這幾年碰到電腦很慢時的做法。   重
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News