在网上找了半天,也没找到完整的例子,自己写吧
1. 一个队列,自定义10个优先级,修改默认celery队列名称
1) testcelery.py
from celery import Celery
import time
broker = 'redis://:[email protected]:6279/0'
backend = 'redis://:[email protected]: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://:[email protected]:6279/0'
backend = 'redis://:[email protected]: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