```bash # 安裝 Redis $ brew install redis # 啟動 Redis $ brew services start redis # 檢查託管狀態 $ brew services info redis """ redis (homebrew.mxcl.redis) Running: ✔ Loaded: ✔ Schedulable: ✘ User: jeter.chen PID: 7992 """ # 安裝必要套件 $ poetry add uvicorn fastapi redis celery ``` Fastapi 範例: ```bash $ uvicorn main:app --reload # app=資料夾名稱、worker=檔案名稱 $ celery -A app.worker worker --loglevel=info # 執行實際的任務處理工作 $ celery -A app.worker beat --loglevel=info # 排程,負責按時發送任務到佇列 ``` 更多指令可參考 ```bash $ celery worker --help ``` Celery V.S Schedule Celery: - 支援非同步。 - 執行過程出錯可重試、結果追蹤。 - 可設定同時處理幾筆任務或是在不同的主機上執行不同任務 (通常會透過 Redis / RabbitMQ)。 - 相較 Schedule 複雜,需配合 Redis / RabbitMQ。 Scheduls: - 只支援同步。 - 不可將任務分配給 worker。 - 不支援錯誤處理。 - 較輕量,一個檔案就可執行。  補充:回傳至 FastAPI 是表示,Celery 執行完成後會將結果寫入 Redis,如果 FastAPI 需要顯示結果是需要自行查詢 Celery 結果,並不是 Worker 自動把結果回傳至 FastAPI。 ## 概念 - task:裝飾為 celery 任務的函數。 - worker:執行任務進程。 - broker:傳遞消息的角色,如 Redis / RabbitMQ。 - backend:儲存任務結果。 - beat:發送任務列隊。 ## DB & Redis 差異 資料如果存在`DB`主要會佔用電腦 CPU,而`Redis`會佔用記憶體。 Redis: - 快取 - 即時處理 - 存取速度快 - 可儲存`string`、`list`、`set`、`hash`等資料型態 - 使用場景像是:快速顯示 profiles、熱門商品(文章)等 DB: - 資料長期保存 - 複雜的查詢 - 存取速度慢 - 儲存表格的資料型態
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up