Celery分布式任务队列的认识和基本操作
一、簡單認識
Celery是由Python開發、簡單、靈活、可靠的分布式任務隊列,其本質是生產者消費者模型,生產者發送任務到消息隊列,消費者負責處理任務。Celery側重于實時操作,但對調度支持也很好,其每天可以處理數以百萬計的任務。
它的特點有:
- 簡單:熟悉了它的流程后,配置使用簡單;
- 高可用:任務執行失敗或執行過程中發生連接中斷,Celery會自動重新執行任務;
- 快速:一個單進程的Celery每分鐘可處理上百萬個任務;
- 靈活:Celery的各個組件都可以被擴展及自定制;
應用場景舉例:
1.web應用:用戶在網站進行某個操作需要很長時間完成時,我們可以將這種操作交給Celery執行,直接返回給用戶,等到Celery執行完成以后通知用戶,大大提好網站并發及用戶體驗感。
2.任務場景:需要批量在幾百臺機器執行某些命令或者任務,Celery可以輕松搞定。
3.定時任務:向定時導數據報表、定時發送通知類似場景,Celery可以提供管理接口和豐富的API。
二、架構和工作原理
Celery由以下三部分構成:消息中間件(Broker)、任務執行單元(Worker)、結果存儲(Backend):來個圖
消息中間件(Broker):
消息中間件Broker支持RabbitMQ、Redis、MongoDB、Memcached 等,官方推薦RabbitMQ。
任務執行單元(Worker)
Worker是任務執行單元,負責從消息隊列中取出任務執行,它可以啟動一個或者多個,也可以啟動在不同的機器節點,這就是其實現分布式的核心。
結果存儲(Backend)
Backend結果存儲官方也提供了諸多的存儲方式支持:RabbitMQ、?Redis、Memcached,SQLAlchemy, Django ORM、Apache Cassandra、Elasticsearch。
工作原理:
任務模塊Task包含異步任務和定時任務。其中,異步任務通常在業務邏輯中被觸發并發往消息隊列,而定時任務由Celery Beat進程周期性地將任務發往消息隊列;
任務執行單元Worker實時監視消息隊列獲取隊列中的任務執行;
Woker執行完任務后將結果保存在Backend中;
三、安裝使用
Redis的安裝:
參考我的另外一篇:https://www.cnblogs.com/Utopia-Clint/p/10868258.html
Celery的安裝:
一個簡單的應用(Linux環境下)
注意:此時并沒有將配置文件、任務文件及初始化文件分開,真的到應用環境中是要分開的,后面會提到;
創建一個文件目錄:
mkdir /root/celery_study在celery_study創建文件task.py
?
task.py:任務定義文件
# -*- coding:utf-8 -*- # @Author : Clint from celery import Celery app = Celery('task',broker='redis://:123456@localhost:6379',backend='redis://:123456@localhost:6379',)@app.task def add(x, y):print("running...", x, y)return x + y?啟動Worker
celery -A task worker --loglevel=info各個參數含義:
worker: 代表第啟動的角色是work當然還有beat等其他角色;
-A :項目路徑,這里我的目錄是task;
-loglevel:啟動的日志級別,有info、debug等,更多參數使用celery --help查看
任務隊列已經準備就緒;
我們還需要通過delay或apply_async來將任務添加到worker中,這里我們通過交互式方法添加任務,并返回AsyncResult對象,通過AsyncResult對象獲取結果:
AsyncResult除了get方法用于常用獲取結果方法外還提以下常用方法或屬性:
- state: 返回任務狀態;
- task_id: 返回任務id;
- result: 返回任務結果,同get()方法;
- ready(): 判斷任務是否以及有結果,有結果為True,否則False;
- info(): 獲取任務信息,默認為結果;
- wait(t): 等待t秒后獲取結果,若任務執行完畢,則不等待直接獲取結果,若任務在執行中,則wait期間一直阻塞,直到超時報錯;
- successfu(): 判斷任務是否成功,成功為True,否則為False;
轉載于:https://www.cnblogs.com/Utopia-Clint/p/10861899.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Celery分布式任务队列的认识和基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj/OpenJ_Bailian -
- 下一篇: 四叶草社交平台——十天冲刺(9)