python + celery简例

在网上找了半天,也没找到完整的例子,自己写吧

1. 一个队列,自定义10个优先级,修改默认celery队列名称

1) testcelery.py

from celery import Celery
import time

broker  = 'redis://:passwd@127.0.0.1:6279/0'
backend = 'redis://:passwd@127.0.0.1:6279/1'
app = Celery('test',backend=backend,broker=broker)

app.conf.broker_transport_options = {
    'priority_steps': list(range(10)),
    'sep': ':',
    'queue_order_strategy': 'priority',
}

app.conf.task_default_queue = 'autotest'

@app.task(priority=0)
def add(x, y):
    time.sleep(2)
    return x + y

@app.task(priority=5)
def minus(x, y):
    time.sleep(1)
    return x - y

@app.task(priority=8)
def multiply(x, y):
    time.sleep(1)
    return x * y
 

2)启动celery命令

celery worker -A testcelery  -l info

3)任务

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from testcelery  import add
from testcelery  import minus
from testcelery  import multiply

count=100
while count > 0:
    count -=1
    # 将任务函数加入到队列中,可使用delay()
    result = add.delay(count, count-1)
    result = minus.delay(count, count-1)
    result = multiply.delay(3, count-1)


执行

python add_task.py
 

2. 2个队列,多个优先级

1) testcelery.py

from celery import Celery
import time


broker  = 'redis://:passwd@127.0.0.1:6279/0'
backend = 'redis://:passwd@127.0.0.1:6279/1'
app = Celery('test',backend=backend,broker=broker)

app.conf.broker_transport_options = {
    'priority_steps': list(range(10)),
    'sep': ':',
    'queue_order_strategy': 'priority',
}

# 不同函数在不同队列里

CELERY_ROUTES = {'app.addfeed': {'queue': 'feed', 'routing_key':'for_feed'},
                'app.minus': {'queue': 'autotest','routing_key':'for_minus'}
                }


app.conf.task_default_queue = 'autotest'
app.conf.task_queues = (
    Queue('autotest',    routing_key='for_minus'),
    Queue('feed', routing_key='for_feed'),
)

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

@app.task(priority=5)
def minus(x, y):
    return x - y

@app.task(priority=8)
def multiply(x, y):
    return x * y

@app.task(priority=0)
def addfeed(x, y):
    time.sleep(2)
    return x + y*2
  

2)启动celery命令

celery  worker  -A testcelery  -l info -Q  feed,autotest

3)任务文件 

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from testcelery  import add
from testcelery  import minus
from testcelery  import multiply

count=100
while count > 0:
    count -=1
     # 将任务函数加入到队列中,可使用delay()
    result = minus.delay(count, count-1)
    result = addfeed.delay(count, 2)


执行

python add_task.py

你可能感兴趣的:(Python,python,开发语言)