前言
使用celery包含三個方面:1. 定義任務函數。2. 運行celery服務。3. 客戶應用程序的調用。
實例一:
#1. 定義任務函數
創建一個文件 tasks.py
輸入下列代碼:
from celery import Celery #導入Celery broker = 'redis://127.0.0.1:6379/5' # 設置broker backend = 'redis://127.0.0.1:6379/6' # 設置backend app = Celery('tasks', broker=broker, backend=backend) # 實例化celery # 編寫任務 @app.task def add(x, y): return x + y
上述代碼導入了celery,然后創建了celery 實例 app,實例化的過程中指定了任務名tasks
(和文件名一致),傳入了broker和backend。然后創建了一個任務函數add
。
#2. 運行celery服務
下面啟動celery服務。在當前命令行終端運行(分別在 env1 和 env2 下執行):
celery -A tasks worker --loglevel=info
目錄結構 (celery -A tasks worker --loglevel=info 這條命令當前工作目錄必須和 tasks.py 所在的目錄相同。即 進入tasks.py所在目錄執行這條命令。)
使用 python 虛擬環境 模擬兩個不同的 主機。
此時會看見一對輸出。包括注冊的任務啦。
#3. 客戶應用程序的調用。
3.1 交互式客戶端程序調用方法
打開一個命令行,進入Python環境。
調用 delay 函數即可啟動 add 這個任務。這個函數的效果是發送一條消息到broker中去,這個消息包括要執行的函數、函數的參數以及其他信息,具體的可以看 Celery官方文檔。這個時候 worker 會等待 broker 中的消息,一旦收到消息就會立刻執行消息。
啟動了一個任務之后,可以看到之前啟動的worker已經開始執行任務了。
現在是在python環境中調用的add函數,實際上通常在應用程序中調用這個方法。
注意:如果把返回值賦值給一個變量,那么原來的應用程序也會被阻塞,需要等待異步任務返回的結果。因此,實際使用中,不需要把結果賦值。
3.2應用程序中調用方法
新建一個 main.py 文件 代碼如下:
from tasks import add r = add.delay(2, 2) r = add.delay(3, 3) print(r.ready()) print(r.result) print(r.get())
在celery命令行可以看見celery執行的日志。打開 backend的redis,也可以看見celery執行的信息。
實例二:
首先要有一個main文件
再者要有一個config文件
然后就是任務執行文件
如圖 celery的目錄
main.py 文件
config.py文件
tasks.py文件
最后
celery服務的開啟命令
celery -A celery_tasks.email.tasks worker -l info
注意:celery_tasks.email.tasks 是該函數執行的路徑 填寫正確才能啟動celery服務