今天跟大家讲解一下最简单celery框架怎么构建,以及怎么用本地的IDE启动服务端进行数据监控,废话不多说,直接开始。
一、Celery
1、组件
最简单也是官方推荐的比较合适的RabbitMQ,在本次例子中就拿RabbitMQ进行中间件的储存以及结果集的储存,就不用其他的组件,类似Redis,MySQL等。
2、配置
整体的主要有以下几个文件 celery_config 储存Celery配置,主要有队列,优先级,任务限制等 celery_instance 主要是实例化celery main 启动celery服务端 task_register celery任务注册文件 task_test celery任务构建文件,进行测试

# 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

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


三、总结
分布式celery任务调度系统的简单的构建很简单,对于整体任务的流程是这么走的可以去看我的另外一篇文章,传送门:blog.csdn.net/qq_35869630…
但是celery在实际应用中并非这么简单,怎么把不同任务放到不同队列,怎么保证任务的优先级,怎么保证任务执行不重复等等,实际生产中会有很多问题需要注意。
下一站我会接着讲解celery队列的建立以及队列中任务优先级的问题。
最好的关系是互相成就,如果对您有一点帮助,您的三连就是我创作的最大的动力,感谢!
注:如果本篇博客有任何错误和建议,欢迎各位指出,不胜感激!