我們需要一個任務隊列來進行任務的配置設定和維護,我們選擇最常見的 Celery
Celery 介紹
Celery (芹菜)是一個異步任務隊列/基于分布式消息傳遞的作業隊列
(PS:不得不說,我并不喜歡芹菜,這差點讓我放棄了它
Celery 的結構非常簡單,大緻分為 3 個部分:
-
負責任務的處理,即執行工作的線程worker部分
-
負責任務消息的分發以及任務結果的存儲,這部分任務主要由中間資料存儲系統完成,比如消息隊列伺服器 RabbitMQ 、Redis 、Amazon SQS、MongoDB、IronMQ 等或者關系型資料庫,使用關系型資料庫依賴 Sqlalchemy 或者 Django 的 ORMbroker部分
-
負責進行任務最開始的指派與執行控制,可以是單獨的 Python 腳本,也可以和其他程式結合,應用到 Django 或者 Flask 等 Web 架構裡面以及你能想到的任何應用Celery主類
安裝
pip install celery
pip install celery-with-redis
pip install flower
flower
是 Celery 的監控工具,提供了圖形界面監控任務的執行
安裝 redis
wget http://download.redis.io/releases/redis-.tar.gz
tar xzf redis-.tar.gz
cd redis-
make -j8
啟動 redis
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu0WO1gWMuNDOxMDMxM3NqFHM3IGZuVWd1F2Yx8VZnFWbp9CX5ljcoRnb5YjZ5ITex52dpJ3YyEGbyF2YvwlbhRXaU9CXt92Yu8WdsVnY5pnLjlGdhR3cvw1LcpDc0RHaiojIsJye.png)
啟動 flower
啟動 celery
送出任務
tasks.py
import time
from celery import Celery, platforms
platforms.C_FORCE_ROOT = True
celery = Celery("tasks", broker='redis://localhost:6379/0')
@celery.task
def add(x, y):
return x + y
任務執行
from tasks import *
add.delay(, )
執行結果
檢視 flower(http://localhost:7788/)
以 root 身份啟動 celery
celery -A symbolic_exec worker --loglevel=info
export C_FORCE_ROOT = "true"
若任務被修改,Celery 需要重新啟動,否則無法随之更改