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
選擇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叢集管理實作