Celery的使用(1)---簡單配置與初次運行

前言

celery是一個基於python開發的簡單、靈活且可靠的分佈式任務隊列框架, 是一個分佈式隊列的管理工具, 可以用 Celery 提供的接口快速實現並管理一個分佈式的任務隊列.。它採用了典型的生產者-消費者模型,主要由三部分組成:

  • 消息隊列broker:broker實際上就是一個MQ隊列服務,可以使用Redis、RabbitMQ等作爲broker;

  • 處理任務的消費者workers:broker通知worker隊列中有任務,worker去隊列中取出任務執行,每一個worker就是一個進程;

  • 存儲結果的backend:執行結果存儲在backend,默認也會存儲在broker使用的MQ隊列服務中,也可以單獨配置用何種服務做backend;

在這裏插入圖片描述

celery安裝

pip install celery

celery 簡單運行

創建文件

安裝完成後在自己的APP下創建一個tasks.py文件,名字最好就是tasks,不要隨意更改,有多個app則每個app下都可以創建一個task.py(前提是有需要的話)目錄結構如下,本文已django爲例:

my_demo
	|--func_app
		|-- admin.py
		|-- apps.py
		|-- __init__.py
		|-- models.py
		|-- tasks.py
		|-- tests.py
		|-- urls.py
		|-- views.py
	|--my_demo
		|-- celery.py
    	|-- __init__.py
    	|-- settings.py
    	|-- urls.py
    	|-- wsgi.py
tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://:password@host:port/database_num',backend='redis://:password@host:port/database_num')
#第一個次數‘tasks’是當前模塊的名字,第二個參數是broker代理的url,這裏選用了redis

第一個參數 ‘tasks’ 是當前模塊的名字,第二個參數是消息隊列broker的url,第三個參數是存放結果的backend,這裏都選用了redis(也可以是RabbitMQ)。

編寫第一段celery代碼

tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://:password@host:port/database_num',backend='redis://:password@host:port/database_num')
@app.task
def add(x, y):
	return x + y
if __name__ == '__main__':
    res = add.delay(3,4)
    print(res.result)#打印結果

定義一個簡單的add函數,使用delay()方法進行調用,res.result 返回celery計算的結果,先不要急着運行,這樣肯定運行不成功的。

爲運行程序準備環境(已經具備了可跳過)

接下來我們去坐準備工作,一般我們的服務都會部署到linux服務器上,假設你現在已經有一臺自己的服務器,那麼請使用SecureCRT或者putty連接上機器,還是先安裝redis和celery,快捷安裝如下:

Redis安裝-------10分鐘安裝配置Redis

pip install celery

創建一個目錄專門用於執行celery程序(位置隨你高興),再創建一個tasks.py:

mkdir celery_code#創建目錄
cd celery_code#進入目錄下面
touch tasks.py #創建tasks.py文件,功能與剛纔上面的一樣
vi tasks.py  #打開文件

運行celery

vi tasks.py 後按下鍵盤上的i鍵,複製剛纔的代碼粘貼進這個文件,按下ESCSHIFT+:,輸入wq保存退出,分別輸入以下命令。

chmod +x tasks.py  #給tasks.py賦予可執行權限
celery -A tasks worker --loglevel=info    ##運行celery

如果順利的話,你將看到如下界面:
在這裏插入圖片描述

運行程序

忽略最後一行,這就代表啓動成功了,接着你可以在你的window開發環境上運行程序了,運行後應該能看到如下:
Linux:
在這裏插入圖片描述
可以清楚的看到celery在Received到task後很快woker就開始工作,返回了tasks.add執行success,tasks即我們的模塊名稱,add爲我們定義的方法名,success代表執行成功,後面的一串小數即爲執行的時間,7爲我們想要的執行結果。

Windows: 在這裏插入圖片描述
而我們pycharm下同樣也返回了結果7,執行成功!!!

後續

這時如果你有興趣的話可以登錄redis查看broker和backend:

redis-cli #連接redis客戶端
select database_num  #爲你在前面配置的worker和backend的數據庫編號
keys *  #查看執行過的任務編號

在這裏插入圖片描述
仔細查看最後標紅的一行,如果與前面運行程序中的celery結果圖對比就會發現,後面的編號其實是一樣的,可以斷定這就是我們剛纔運行的任務編號,這時就可以根據這個key查詢celery返回的信息。

在這裏插入圖片描述
截圖可能不太清晰,但依然能看到狀態status是success,result是7,task_id是上圖標紅的那串。

結束

本文介紹了怎麼安裝運行celery,當然本文中所使用的的add函數是極爲簡單的,後續將更新配置文件化和較常用的celery發送郵件、celery定時任務,更多內容請點擊從今天開始種樹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章