今天跟大家讲解一下最简单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 ' res:{}'.format(res)
return res
@app.task
def prod(*args):
print args
res = 1
for i in args[0]:
res *= i
print ' 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队列的建立以及队列中任务优先级的问题。
最好的关系是互相成就,如果对您有一点帮助,您的三连就是我创作的最大的动力,感谢!
注:如果本篇博客有任何错误和建议,欢迎各位指出,不胜感激!