简易构建celery框架+如何在本地IDE(pycharm)启动celery监听队列

2,578 阅读3分钟

今天跟大家讲解一下最简单celery框架怎么构建,以及怎么用本地的IDE启动服务端进行数据监控,废话不多说,直接开始。

一、Celery

1、组件

最简单也是官方推荐的比较合适的RabbitMQ,在本次例子中就拿RabbitMQ进行中间件的储存以及结果集的储存,就不用其他的组件,类似Redis,MySQL等。

2、配置

整体的主要有以下几个文件 celery_config 储存Celery配置,主要有队列,优先级,任务限制等 celery_instance 主要是实例化celery main 启动celery服务端 task_register celery任务注册文件 task_test celery任务构建文件,进行测试

在这里插入图片描述
celery_config.py

# broker 
BROKER_URL = 'amqp://root:root@127.0.0.1/dispatch_server_host'
# backend
CELERY_RESULT_BACKEND = 'amqp://root:root@127.0.0.1/dispatch_server_host'
# 时区
CELERY_TIMEZONE = 'Asia/Shanghai'
# include
CELERY_INCLUDE = ['celery_test.task_register']

BROKER_URL 消息中间件的连接 CELERY_RESULT_BACKEND 任务结果数据的储存 CELERY_INCLUDE 任务注册路径

celery_instance.py 实例化celery

from celery import Celery
from celery_test import celery_config
app = Celery()
# 将配置文件加载进行实例中
app.config_from_object(celery_config)

main.py 启动celery服务端

from celery_instance import app
if __name__ == '__main__':
    app.start()

task_register.py 在这里我们注册了三个任务 add,sum,prod

from celery_test.celery_instance import app
@app.task
def add(x, y):
    return x + y

@app.task
def sum(*args):
    """
    :param args: ([2, 2], )
    :return:
    """
    print args
    res = 0
    for i in args[0]:
        res += i
    print '<sum> res:{}'.format(res)
    return res

@app.task
def prod(*args):
    print args
    res = 1
    for i in args[0]:
        res *= i
    print '<sum> res:{}'.format(res)
    return res

task_test.py 先进行一个简单的add测试

# -*- coding:utf-8 -*-
from celery_test.task_register import *
from celery import group
from celery import chord

sig = add.s(1, 1)
sig.apply_async()

二、启动Celery

在这里启动celery有两种方式,一种是直接在服务器上启动 celery -A celery_test.main worker -n work_test -c 1 -l info -Q celery -A 后面接的是启动文件的路径 -c 启动的进程数 -l 打印信息的等级 -Q 监控的队列名称,不在命令中指定的话会监控配置文件中配置的队列,若无则是默认队列celery 第二种启动方式可以在pycharm直接启动 在main启动的时候添加参数即可

在这里插入图片描述

1、启动RabbitMQ

在这里插入图片描述

2、启动celery

在这里插入图片描述
启动界面可以看到我们监控的队列以及注册的任务,连接的RabbitMQ,界面像这样就说明启动成功了。

3、提交测试任务

sig = add.s(1, 1) sig.apply_async() 运行完可以看到celery成功监听到任务,并且打印出执行时间以及结果

在这里插入图片描述
sig = sum.s([1,2,3,4,5,6]) sig.apply_async() 可以看到执行结果也是成功的。
在这里插入图片描述

三、总结

分布式celery任务调度系统的简单的构建很简单,对于整体任务的流程是这么走的可以去看我的另外一篇文章,传送门:blog.csdn.net/qq_35869630…

但是celery在实际应用中并非这么简单,怎么把不同任务放到不同队列,怎么保证任务的优先级,怎么保证任务执行不重复等等,实际生产中会有很多问题需要注意。

下一站我会接着讲解celery队列的建立以及队列中任务优先级的问题。

最好的关系是互相成就,如果对您有一点帮助,您的三连就是我创作的最大的动力,感谢!

注:如果本篇博客有任何错误和建议,欢迎各位指出,不胜感激!