celery+Rabbit MQ简单的Demo

介绍

一个简单的celery + rabbitmq 的搭建例子,用于记录

Celery

异步处理框架, 安装命令

pip install celery

RabbitMQ

消息中间件,用来做队列
安装配置参考 https://juejin.cn/post/6993229378729541646

项目目录结构

先写celery_app文件夹里面的内容

celery_app/init.py
引入配置文件,并指定用什么做队列

from celery import Celery

# app = Celery("celery_app", backend='amqp')
app = Celery("celery_app", backend='amqp')
app.config_from_object("celery_app.celeryconfig")

celery_app/celeryconfig.py
celery的配置文件

RABBIT_MQ = {
    'HOST': '192.168.254.128',
    'PORT': 5672,
    'USER': 'test',
    'PASSWORD': '123456'
}


BROKER_URL = 'amqp://%s:%s@%s:%s/myvhost' % (RABBIT_MQ['USER'], RABBIT_MQ['PASSWORD'], RABBIT_MQ['HOST'], RABBIT_MQ['PORT'])

CELERYD_LOG_FORMAT = '[%(asctime)s] [%(levelname)s] %(message)s'

CELERY_TIMEZONE = 'Asia/Shanghai' # 时区
CELERY_IMPORTS = (  # 指定需要导入的任务模块
    'celery_app.task1', # task1和task2是模块名称
    'celery_app.task2',
)

# 指定队列
CELERY_ROUTES={
        "add":{"queue":"add",},
        "multiply":{"queue":"mul"},
    }



# CELERY_ROUTES = {
#     'add': {'queue': 'add', 'routing_key': 'key1'},
#     'multiply': {'queue': 'mul', 'routing_key': 'key2'},
# }

引入两个异步任务

celery_app/task1.py

import time
from celery_app import app

@app.task(queue="add") # 指定队列
def add(x,y):
    time.sleep(2)
    return x + y

celery_app/task2.py

import time
from celery_app import app

@app.task(queue="multiply")
def multiply(x, y):
    time.sleep(2)
    return x * y

最后,最外层的测试,将任务push进队列中去执行异步的任务
api.py

from celery_app.task1 import add
from celery_app.task2 import multiply


print("start...")


result = add.delay(1,2)
# result2 = multiply.delay(1,2)
print('异步。。',result, result2)
# print('异步。。',result)

print("end...")

启动

按照文章上面的步骤,安装好 rabbitmq 之后,启动 rabbitmq

service rabbitmq-server start # 启动服务 
service rabbitmq-server stop # 停止服务 
service rabbitmq-server restart # 重启服务

然后启动 celery

celery -A celery_app worker --loglevel=info -Q add # celery_app 是celery指定的app名字,-l 是输出日志, -q 是指定队列

测试运行celery + rabbitmq

完。

posted @ 2021-08-17 00:13  陈科科  阅读(205)  评论(1编辑  收藏  举报