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是一款訊息佇列工具,可用於處理實時資料以及任務排程 什麼是任務佇列?任務佇列一般用於執行緒或計算機之間分配工作的一種機制 任務佇列的輸入是乙個成為任務的工作單元,有專門的職稱 ...