celery

Celery介紹
html

 

Celery是一個功能完備即插即用的異步任務隊列系統。它適用於異步處理問題,當發送郵件、或者文件上傳, 圖像處理等等一些比較耗時的操做,咱們可將其異步執行,這樣用戶不須要等待好久,提升用戶體驗。python

文檔:http://docs.jinkan.org/docs/celery/getting-started/index.htmlgit

Celery的特色是:github

  • 簡單,易於使用和維護,有豐富的文檔。redis

  • 高效,單個celery進程每分鐘能夠處理數百萬個任務。django

  • 靈活,celery中幾乎每一個部分均可以自定義擴展。api

 

任務隊列是一種跨線程、跨機器工做的一種機制.
任務隊列中包含稱做任務的工做單元。有專門的工做進程持續不斷的監視任務隊列,並從中得到新的任務並處理.
celery經過消息進行通訊,一般使用一個叫Broker(中間人)來協client(任務的發出者)和worker(任務的處理者). clients發出消息到隊列中,broker將隊列中的信息派發給worker來處理。

 

Celery的架構

Celery的架構由三部分組成,消息隊列(message broker),任務執行單元(worker)和任務執行結果存儲(task result store)組成。架構

 

 

一個celery系統能夠包含不少的worker和brokerapp

Celery自己不提供消息隊列功能,可是能夠很方便地和第三方提供的消息中間件進行集成,包括RabbitMQ,Redis,MongoDB等異步

 

安裝

pip install -U celery

也可從官方直接下載安裝包:https://pypi.python.org/pypi/celery/

tar xvfz celery-0.0.0.tar.gz
cd celery-0.0.0
python setup.py build
python setup.py install

 

使用

使用celery第一件要作的最爲重要的事情是須要先建立一個Celery實例,咱們通常叫作celery應用,或者更簡單直接叫作一個app。app應用是咱們使用celery全部功能的入口,好比建立任務,管理任務等,在使用celery的時候,app必須可以被其餘的模塊導入。

通常celery任務目錄直接放在項目的根目錄下便可,路徑:

luffyapi/
├── my_celery/
    ├── config.py     # 配置文件
    ├── __init__.py   
    ├── main.py       # 主程序
    └── sms/          # 一個目錄能夠放置多個任務,該目錄下存放當前任務執行時須要的模塊或依賴
        └── tasks.py  # 任務的文件,名稱必須是這個!!!

 

main.py,代碼:

# 主程序
from celery import Celery
# 建立celery實例對象
app = Celery("luffy")

# 經過app對象加載配置
app.config_from_object("my_celery.config")

# 自動搜索並加載任務
# 參數必須必須是一個列表,裏面的每個任務都是任務的路徑名稱
# app.autodiscover_tasks(["任務1","任務2",....])
app.autodiscover_tasks(["my_celery.sms","my_celery.cache"])

# 啓動Celery的命令
# 強烈建議切換目錄到項目的根目錄下啓動celery!!
# celery -A my_celerymain worker --loglevel=info

 

配置文件config.py,代碼:

# 任務隊列的連接地址
broker_url = 'redis://127.0.0.1:6379/15'
# 結果隊列的連接地址
result_backend = 'redis://127.0.0.1:6379/14'

 

建立一個任務文件sms/tasks.py,並建立任務,代碼:

# celery的任務必須寫在tasks.py的文件中,別的文件名稱不識別!!!
from my_celery.main import app

@app.task  # name表示設置任務的名稱,若是不填寫,則默認使用函數名作爲任務名
def send_sms():
    print("發送短信!!!")

@app.task(name="send_sms2")  # name表示設置任務的名稱,若是不填寫,則默認使用函數名作爲任務名
def send_sms2():
    print("發送短信任務2!!!")

 

運行代碼

celery -A my_celery.main worker --loglevel=info

 

django導入

在程序中調用上面的異步任務,拿django進行舉例:

# 調用celery執行異步任務
from my_celery.sms.tasks import send_sms
send_sms.delay(mobile)

其餘參考文檔:

http://docs.celeryproject.org/en/latest/getting-started/introduction.html

https://github.com/celery/celery/tree/master/examples/django/

https://www.jianshu.com/p/1840035cb510

https://flower.readthedocs.io/en/latest/screenshots.html

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息