天天看點

Celery學習筆記(一)Celery學習筆記(一)

Celery學習筆記(一)

什麼是Celery

Celery是一個python子產品,它在官網的定義:

Celery is asynchronous task queue/job based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.

這裡強調的概念包括:異步任務隊列 / 分布式消息傳遞 / 實時或排程任務,下面對這些概念分别做解釋

為什麼要使用Celery

Celery是一個使用Python開發的分布式任務排程子產品,是以對于大量使用Python建構的系統,可以說是無縫銜接,使用起來很友善。Celery專注于實時處理任務,同時也支援任務的定時排程。是以适合實時異步任務定時任務等排程場景。

Celery任務隊列

任務隊列是一種在程序或機器之間分發任務的機制。

任務隊列的輸入是被稱為任務(task)的工作單元。專用的工作程序會時刻監控任務隊列,來擷取要執行的任務。

celery的client和worker通過消息來“溝通“。Celery需要依靠RabbitMQ等作為消息代理,同時也支援Redis甚至是Mysql,Mongo等,當然,官方預設推薦的是RabbitMQ。

為了開始一個任務,client需要向隊列中發送任務消息,然後broker會把任務投遞給worker處理。一個celery系統可以包含多個worker和broker,以便實作高可用和可水準擴充。

Celery學習筆記(一)Celery學習筆記(一)

如何安裝Celery

選擇broker

RabbitMQ 功能完備、穩定、耐用,并且安裝簡便,是生産環境的絕佳選擇。

sudo apt-get install rabbitmq-server

指令執行完成後,中間人就已經運作在背景,準備好傳輸消息

為了友善之後分布式部署的時候通過RabbitMQ進行溝通,我們需要建立一個 RabbitMQ 使用者、一個虛拟主機,并且允許這個使用者通路這個虛拟主機:

$ sudo rabbitmqctl add_user myuser mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
           

RabbitMQ的Python用戶端選擇librabbitmq這個C庫。

分布式的時候:一定要顯式指定rabbitMQ的使用者名,密碼,server的IP,虛拟主機。

eg:

broker=’amqp://danny:[email protected]:5672/myvhost’

否則在worker開始工作的時候會出現如下錯誤:ACCESS_REFUSED Login was refused

安裝celery

Celery 送出到了 Python Package Index(PyPI)上,是以你可以用标準的 Python 工具,諸如 pip 或 easy_install 來安裝:

$ pip install celery

更詳細的Celery架構圖

Celery學習筆記(一)Celery學習筆記(一)

Celery入門使用方式

Celery學習筆記

Celery初步

celery叢集管理實作