日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Celery分布式任务队列的认识和基本操作

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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分布式任务队列的认识和基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。