不可控的外部依賴(第三方站點、網路、加密、檔案系統)不代表不能測、不能重構——關鍵是找到每種依賴各自的替身策略。這個系列會用一個真實運作的 HLS 分段式串流下載工具為案例,從爬蟲抽象層設計、協定與加密處理、非同步下載引擎,到怎麼測試滿是外部依賴的程式碼,一步步把「能跑就好」的工具變成「改了會有信心」的工具。
前言:昨天講的「規格退路」,我自己的程式碼有沒有做到? 昨天講完 RFC 8216 規格定義的「#EXT-X-KEY 沒帶 IV 屬性時,要用媒體序號推算」,回...
前言:下載失敗了,要重試「這一個片段」還是「整個流程」? 一份內容可能被切成幾十甚至上百個片段,如果整個下載流程用同一層 try/except 包起來,任何一個...
前言:程式中斷重跑,要從頭開始嗎? 下載到一半,程式因為任何原因中斷(手動停止、網路斷線、程式崩潰),重新執行時如果沒有任何判斷機制,最簡單的做法就是全部重新下...
前言:片段數量對了,合併出來的結果卻怪怪的 前幾天講的斷點續傳、局部重試,解決的都是「片段有沒有成功下載」;但即使所有片段都成功下載、數量也對,合併出來的結果還...
前言:這七天看似在講很多零散的細節 第二部從索引清單的基本結構,講到巢狀清單、加密金鑰、IV 的規格退路、再到片段規格一致性的驗證,看起來是七個各自獨立的技術細...
前言:下載幾十個片段,逐一循序下載不行嗎? 技術上完全可以,只是慢。如果每個片段的下載都要等前一個完成才開始下一個,總耗時大約是「單一片段耗時 × 片段數量」;...
前言:兩種併發模型可以混著用嗎? 昨天講完 asyncio 跟 ThreadPoolExecutor 各自適合的場景,今天要誠實檢視這個系列素材專案裡真實存在的...
前言:進度顯示只是印個百分比,需要特別設計嗎? 單一個下載工作,print 一下進度確實夠用。但當有十個片段同時並行下載,每個片段各自 print 自己的進度,...
前言:重試前要不要等待,等多久? Day 12 講過失敗要局部重試,但沒細講「重試前該等多久」。立刻重試聽起來反應最快,但如果失敗原因是對方暫時過載,立刻重試只...
前言:下載迴圈跑完,就代表可以合併了嗎? Day 12 講過每個片段各自重試、超過上限就記錄失敗並放棄。這代表下載迴圈跑完之後,不能直接假設「所有片段都成功了」...