關於Celery 分布式任務佇列

2021-08-21 12:04:12 字數 1969 閱讀 8874

celery 是 distributed task queue,分布式任務佇列,分布式決定了可以有多個 worker 的存在,佇列表示其是非同步操作,即存在乙個產生任務提出需求的工頭,和一群等著被分配工作的碼農。

在 python 中定義 celery 的時候,我們要引入 broker,中文翻譯過來就是「中間人」的意思,在這裡 broker 起到乙個中間人的角色。在工頭提出任務的時候,把所有的任務放到 broker 裡面,在 broker 的另外一頭,一群碼農等著取出乙個個任務準備著手做。

什麼是backend?

通常程式傳送的訊息,發完就完了,可能都不知道對方時候接受了。為此,celery實現了乙個backend,用於儲存這些訊息以及celery執行的一些訊息和結果。

celery 主要包含以下幾個模組:

任務模組 task

包含非同步任務和定時任務。其中,非同步任務通常在業務邏輯中被觸發併發往任務佇列,而定時任務由 celery beat 程序周期性地將任務發往任務佇列。

訊息中介軟體 broker

broker,即為任務排程佇列,接收任務生產者發來的訊息(即任務),將任務存入佇列。celery 本身不提供佇列服務,官方推薦使用 rabbitmq 和 redis 等。

任務執行單元 worker

worker 是執行任務的處理單元,它實時監控訊息佇列,獲取佇列中排程的任務,並執行它。

任務結果儲存 backend

backend 用於儲存任務的執行結果,以供查詢。同訊息中介軟體一樣,儲存也可使用 rabbitmq, redis 和 mongodb 等。

mq全稱為message queue, 訊息佇列(mq)是一種應用程式對應用程式的通訊方法。mq是消費-生產者模型的乙個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取佇列中的訊息。

rabbitmq是mq的一種

安裝rabbitmq

sudo apt-get install rabbitmq-server
啟動rabbitmq

sudo rabbitmq-server

-detached

停止rabbitmq

sudo rabbitmqctl stop
設定rabbitmq

sudo rabbitmqctl add_user nj2905058 123456

sudo rabbitmqctl add_vhost myvhost

sudo rabbitmqctl set_user_tags nj2905058 mytag

sudo rabbitmqctl set_permissions -p myvhost nj2905058 ".* ".* ".*"

rabbitmqctl list_queues -p myvhost

安裝celery

pip install celery -i 

broker_url = 'amqp://nj2905058:123456@localhost:5672/myvhost'

執行celery worker

nohup celery -a tasks(python檔案) worker --loglevel=info &
執行測試celeryresult = add.delay(4, 4)

result.ready()

result.get(timeout=1)

result.status

result.id

分布式任務佇列Celery

celery 芹菜 是基於python開發的分布式任務佇列。它支援使用任務佇列的方式在分布的機器 程序 執行緒上執行任務排程。基本用法是在程式裡引用celery,並將函式方法繫結到task from celery import celery def add x,y return x y from t...

Celery分布式任務佇列

celery是乙個簡單 靈活且可靠的,處理大量訊息的分布式系統 專注於實時處理的非同步任務佇列 同時也支援任務排程 celery的架構由三部分組成,訊息中介軟體 message broker 任務執行單元 worker 和任務執行結果儲存 task result store 組成。訊息中介軟體 ce...

Celery分布式任務佇列

celery是一款非常簡單,靈活,可靠的分布式系統,可用於處理大量訊息,並且提供了一整套操作此系統的一系列工具 celery是一款訊息佇列工具,可用於處理實時資料以及任務排程 什麼是任務佇列?任務佇列一般用於執行緒或計算機之間分配工作的一種機制 任務佇列的輸入是乙個成為任務的工作單元,有專門的職稱 ...