參考:celery官方文件英文版:
celery官方文件中文版:
celery是乙個分布式任務佇列工具,是乙個非同步的任務佇列基於分布式訊息傳遞。更多介紹可以參考 官網
在celery中幾個基本的概念,需要先了解下,不然不知道為什麼要安裝下面的東西。概念:broker、backend。
其中broker的中文意思是 經紀人 ,其實就是一開始說的 訊息佇列 ,用來傳送和接受訊息。這個broker有幾個方案可供選擇:rabbitmq,redis(丟資料),資料庫(不推薦),等等
後面的那個backend是在celery的配置中的乙個配置項 celery_result_backend ,作用是儲存結果和狀態,如果你需要跟蹤任務的狀態,那麼需要設定這一項,可以是database backend,也可以是cache backend,具體可以參考這裡: celery_result_backend 。
我自己演示使用rabbitmq作為broker,用mysql作為backend。
有了上面的概念,需要安裝這麼幾個東西:rabbitmq、sqlalchemy、celery
安裝方式也都很簡單: rabbitmq:
mac下:
brew install rabbitmq
linux:
sudo apt-get install rabbitmq-server
剩下兩個都是python的東西了,直接pip安裝就好了,對於從來沒有安裝過mysql驅動的同學可能需要安裝mysql-python。
安裝完成之後,啟動服務:
$ rabbitmq-server[回車]
啟動後不要關閉視窗, 下面操作新建視窗(tab)
3.1 確保你之前的rabbitmq已經啟動。
還是官網的那個例子,在任意目錄新建乙個tasks.py的檔案,內容如下:
from celery import celery
def add(x, y):
return x + y
3.2 使用redis作為訊息佇列
celery_task_serializer='json',
celery_accept_content=['json'], # ignore other content
celery_result_serializer='json',
celeryd_concurrency = 8
)def add(x, y):
return x + y
在同級目錄執行:
保持視窗開啟,新開乙個視窗進入互動模式,python或者ipython:
>>> from tasks import add
>>> add.delay(4, 4)
到此為止,你已經可以使用celery執行任務了,上面的python互動模式下簡單的呼叫了add任務,並傳遞4,4引數。
但此時有乙個問題,你突然想知道這個任務的執行結果和狀態,到底完了沒有。因此就需要設定backend了。
修改之前的tasks.py中的**為:
# coding:utf-8
import subprocess
from time import sleep
from celery import celery
backend = 'db+mysql:'
broker = 'amqp:'
def add(x, y):
sleep(10)
return x + y
def hostname():
return subprocess.check_output(['hostname'])
除了新增backend之外,上面還新增了乙個who的方法用來測試多伺服器操作。修改完成之後,還是按照之前的方式啟動。
同樣進入python的互動模型:
>>> from tasks import add, hostname
>>> r = add.delay(4, 4)
>>> r.ready() # 10s內執行,會輸出false,因為add中sleep了10s
>>>
>>> r = hostname.delay()
>>> r.result # 輸出你的hostname
做完上面的測試之後,產生了乙個疑惑,celery叫做分布式任務管理,那它的分布式體現在哪?它的任務都是怎麼執行的?在哪個機器上執行的?
在當前伺服器上的celery服務不關閉的情況下,按照同樣的方式在另外一台伺服器上安裝celery,並啟動:
$ celery -a tasks worker --loglevel=info
發現前乙個伺服器的celery服務中輸出你剛啟動的伺服器的hostname,前提是那台伺服器連上了你的rabbitmq。
然後再進入python互動模式:
>>> from tasks import hostname
>>>
>>> for i in range(10):
... r = hostname.delay()
... print r.result # 輸出你的hostname
>>>
看你輸入的內容已經觀察兩台伺服器上你啟動celery服務的輸出。
一開始測試時遠端伺服器無法連線本地的rabbitmq服務,後來發現需要設定許可權,在/usr/local/etc/rabbitmq/rabbitmq-env.conf這個檔案中,修改node_ip_address=127.0.0.1中的ip為0.0.0.0。
這篇文章簡單的介紹了celery的使用,重點還是在分布式的使用。覺得不太爽的地方是,在擴充套件時,需要重新把**(tasks.py)部署一遍,而不是可以直接把tasks進行共享,可能celery是通過task來進行不同的worker的匹配的?目前還不太了解,等深入使用之後再說。
celery的安裝及使用
pip install celery celery task main.py import os from celery import celery 定義celery例項,需要的引數,1,例項名,2,任務發布位置,3,結果儲存位置 mycelery broker redis 任務存放的地方 back...
celery的使用介紹
celery是專注實時處理和任務排程的分布式任務佇列。主要應用場景 1,web應用,當需要觸發事件需要較長時間處理完成,可以交給celery進行非同步執行,執行完後返回結果,這段時間不用等待,提高系統的吞吐量和響應時間。2,完成任務時,需要額外的事件處理,如傳送郵件等。3,後台定時任務處理,cele...
Celery的基本使用
celery是乙個簡單 靈活且可靠的,處理大量訊息的分布式系統 專注於實時處理的非同步任務佇列 同時也支援任務排程 celery 官網 celery 官方文件英文版 celery 官方文件中文版 ps celery在windows系統上會出現不相容的情況1.可以不依賴任何伺服器,通過自身命令,啟動服...