1. 程式人生 > >python/mq Celery

python/mq Celery

RKE import 常見 ack read backend 功能 time 命令行

Celery

Celery是管理分布式任務隊列的工具,其本身並不是任務隊列。

Celery常見概念有brokers、backend、workers、tasks。

brokers:中間人,是Celery存放/拿取產品的地方,即任務隊列,常見有rabbitmq/redis/zookeeper。

backend:又稱result stores,存儲運行結果,常見有redis/memcached。

workers:Celery的工作者,從隊列中取出任務並執行,將結果發送到backend。

tasks:任務。

簡例

# tasks.py
from celery import Celery

app = Celery(‘tasks‘, 
                    backend=‘redis://[host]:6379/0‘, 
                    broker=‘amqp://[user]:[password]@[host]:5672‘)

@app.task
def add(x, y):
    return x + y

# 命令行啟動worker,此時broker中還沒有任務
celery -A tasks worker --loglevel=info

# 向broker發送任務並獲取結果
from tasks import add

result = add.delay(2, 3)
while not result.ready():
    time.sleep(1)
print(result.get())

>>>: 5

例子中,app就是celery對象,它定義了對象的名稱(用於命令行啟動),存儲者,任務隊列。
add方法用app.task包裝後,表明此函數為任務執行者。
執行add.delay()方法,參數傳入到執行者,並會返回結果,當result.ready()為真時,表明結果已返回至存儲者,可通過result.get()獲取該結果。

與pika的區別

pika是用來連接rabbitmq的python模塊,rabbitmq本身只有存儲功能,而沒有任務分發調度功能,celery就是用來做任務分配的,當然也可以為pika寫一個調度代碼,不過有現成的celery,只要用就行了。

python/mq Celery