【要約】バックテストがタイムアウトする前に — 長時間実行を制御するための実行設計 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
- ・ジョブの重複発生によるリソース競合。
- ・対象期間の延長や外部APIの遅延による実行時間の爆発。
- ・SIGTERMによる強制終了に伴う、中間データの破損リスク。
// Approach
1.二重タイムアウト:外側のHard timeoutと内側のSoft deadlineを併用。
2.チェックポイント:1 symbol単位でJSONL形式に追記し、再開を容易にする。
3.進捗通知:外部エンドポイントへ進捗をpushし、稼働状態を可視化。
4.systemd活用:RuntimeMaxSecで制限し、OnFailureで後処理を自動化。
// Result
API遅延による実行時間増大時も、データロスなしで復旧。Soft deadlineにより60%の進捗を保存。翌日の実行で残り40%を処理し、運用を継続できた。
Senior Engineer Insight
>
完璧な稼働を目指すのではなく、失敗を前提とした「レジリエンス」の設計が重要。特にJSONLによる追記型チェックポイントは、I/O負荷と堅牢性のバランスが極めて高い。監視(Observability)をジョブ本体から切り離す設計も、実運用における依存関係の最小化として高く評価できる。長時間ジョブの安定性は、中断と再開の容易さに依存する。