celery框架|環境搭建及測試[celery+rabbitmq+redis]

1. celery 簡介

關於celery的簡介,網上一大堆,在此不做贅述。

舉個不太恰當的例子來作說明。celery就是一個服務團隊,進入一家餐館開始服務後,他的廚子在不停地做菜,前臺有多個顧客不停地在喫,只要桌子上沒有菜了,就會有新做好的端上來,直至所有的菜都被喫完爲止。
後臺的廚子叫做broker,顧客叫做worker,而用來臨時存放飯菜的桌子叫做消息隊列(message queue),而洗碗池(此例中每名顧客喫完都會產生一個髒的盤子)叫做backend

以分佈式爬蟲爲例,當確定任務後,由broker將多個任務推送至消息隊列,然後多個分佈式的小爬蟲不停地從消息隊列中獲取子任務進行執行,並將執行的結果存放至backend中。

這就是分佈式框架celery的基本原理,簡單吧?

非常值得一提的是,celery是個服務團隊(框架),不是一家餐館(程序),他不自帶桌子(消息隊列),也不提供洗碗池(backend),他只是面向這些桌子和洗碗池提供服務。在他的官網文檔中推薦了一些目前服務對接比較穩定的桌子(消息隊列)和洗碗池(backend),我摘錄過來,如下所示。
官方文檔推薦的幾個broker

至於backend,個人推薦redis.

2. celery 安裝及部署

2.1 celery 安裝

首先通過pip安裝(python3請通過pip3安裝):

pip install celery

然後在python代碼中導入即可使用:

from celery import Celery

後面要在terminal中啓用celery,需執行如下命令:

sudo apt install python-celery-common
2.2 rabbitmq 安裝

執行如下命令即可安裝rabbitmq:

//安裝rabbitmq
sudo apt install rabbitmq-server
//開啓rabbitmq一些需要用到的插件
sudo rabbitmq-plugins enable rabbitmq_management
//添加用戶及密碼
sudo rabbitmqctl add_user admin admin
//添加虛擬host
sudo rabbitmqctl add_vhost myvhost
//設置虛擬host的權限
sudo rabbitmqctl set_permissions -p myvhost admin '.*' '.*' '.*'

完成以上步驟後,打開瀏覽器,訪問 http://127.0.0.1:15672 並登錄,即可進入rabbitmq管理後臺。如下圖所示:
rabbitmq後臺界面

注意,這裏很重要,如下圖所示:
很重要

1.看好這幾個路徑的位置,後續開發中要經常查看日誌和配置文件,路徑也可以改爲自己想用的。
2.記住這幾個不同的監聽的端口,比如:如果用celery訪問rabbitmq則需訪問5672,瀏覽器訪問則是15672。

3. run起一個簡單的demo

3.1 tasks.py 文件
import time
from celery import Celery

brokerUrl = 'amqp://admin:admin@localhost:5672/myvhost'
app = Celery('tasks',broker=brokerUrl)

@app.task
def add(x,y):
	print('sleep 2 seconds...')
    time.sleep(2)
    return x+y
3.2 在terminal中調用celery:

進入到tasks.py所在的目錄,執行:

celery -A tasks worker --loglevel=info
//參數說明:-A參數表示的是Celery APP的名稱,這個實例中指的就是tasks.py,後面的tasks就是APP的名稱
//worker是一個執行任務角色,loglevel=info記錄日誌類型默認是info
//這個命令啓動了一個worker,用來執行程序中add這個加法任務(task)

會看到如下反饋則說明已經啓動了一個worker:
啓動一個worker

3.3 調用woker並查看執行情況

寫一個簡單的 callworker.py 文件:

from celery import Celery
from tasks import add
add.delay(3,4)
add.delay(4,4)

運行 callworker.py,然後查看之前加載celery worker的那個terminal,可以看到剛纔的callworker.py中的命令已被執行。反饋如下所示:
worker執行任務成功

至此,一個簡單的celery框架安裝部署、demo測試完成。

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