> For the complete documentation index, see [llms.txt](https://go.raymondctw.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://go.raymondctw.dev/technology/task-automation.md).

# Task Automation

再利用Python建立很多自動化任務後，看似方便節省了很多時間，但當任務一多時，整個就混亂啦！包含近期在幫部門架設一些金融資料ETL或相關計算的程式，而跟金融市場相關的就是有一堆日期與時點，總不可能在每次開盤到收盤後的時間都要用一個紙本SOP一一清點吧？這時候就最需要自動排程工具了。

***

## 現有的排程工具

排程系統有分兩類，一個是系統內建，另外一類就是自己額外架設的，作業系統內建的好處就是不用再安裝，對於某些高度資訊戒嚴的公司而言，可能是唯一的辦法了。

#### Crontab (Linux/MacOS)

透過建立一個crontab文件來記錄執行的內容與時間，但就是真的只有執行而已，如果錯誤等流程就要靠自己了。

#### 工作排程器(Windows)

在過去待過資訊戒嚴管制的公司下，裝什麼都有問題，連一個最簡單的pip install xxx都可以讓我搞一整個下午，所以排程這檔事，選擇的空間都沒有，直接就是Windows內建的工作排程器啦！排程一樣可

以上兩種方法我都使用過，當然就是一個最基本的可執行元件，當實際要的問題要解決時，往往相當複雜且繁瑣。

#### APScheduler

APScheduler是一款相當優秀的自動化排程套件，功能相當完整，且可將任務儲存於資料庫中，其他大部分都是把任務存在程式碼中，除非自行做一些客製化修改。

#### Apache AirFlow

AirFlow是另一款更為知名且完整的自動化任務管理框架，且內建網頁前後端作為管理介面(使用Flask)，學習曲線稍微陡一些，對於初學者而言可能沒那麼直覺，但對於後期管理上可走較遠。有個潛在問題就是AirFlow無法在Windows上運行(Docker不算)，對於某些公司或部門來說就是比較大的劣勢，你可能說搞一台Linux VM不就好了？是的，但是實際上公司或部門的政策就是不允許。
