一、celery简介
Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时提供操作和维护分布式系统所需的工具,任务就是消息, 消息中的有效载荷中包含要执行任务需要的全部数据.它是一个分布式队列的管理工具, 可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列.
二、celery特性:
1.方便查看定时任务的执行情况, 如 是否成功, 当前状态, 执行任务花费的时间等. 2.使用功能齐备的管理后台或命令行添加,更新,删除任务. 3.方便把任务和配置管理相关联. 4.多进程, Eventlet 和 Gevent 三种模型并发执行. 5.提供错误处理机制. 6.提供多种任务原语, 方便实现任务分组,拆分,和调用链. 7.支持多种消息代理和存储后端. 8.Celery 是语言无关的.它提供了python 等常见语言的接口支持.
三、celery相关组件:
Celery Beat : 任务调度器. Beat 进程会读取配置文件的内容, 周期性的将配置中到期需要执行的任务发送给任务队列. Celery Worker : 执行任务的消费者, 通常会在多台服务器运行多个消费者, 提高运行效率. Broker : 消息代理, 队列本身. 也称为消息中间件. 接受任务生产者发送过来的任务消息, 存进队列再按序分发给任务消费方(通常是消息队列或者数据库). Producer : 任务生产者. 调用 Celery API , 函数或者装饰器, 而产生任务并交给任务队列处理的都是任务生产者. Result Backend : 任务处理完成之后保存状态信息和结果, 以供查询.
celery的架构图如下:
四、celery支持的序列化
在客户端和消费者之间传输数据需要 序列化和反序列化. Celery支持的序列化如下:
1.pickle:python标准库的一个模块,支持python内置的数据结构,celery官方不推荐 2.json:支持多种语言,可用于跨语言方案 3.yaml:表达能力更强,支持的数据类型也比较多,但是性能方面稍逊json 4.msgpack:二进制的类json序列化方案,比json数据结构更小更快
五、celery的简单使用
1.使用redis作为broker和backend来演示一下celery的使用,首先启动redis,使用db1作为broker和backend:
2.使用下面命令安装celery的模块和redis模块:
pip install celery==4.1 pip install redis==3.3.11
3.编写tasks文件:
# -*- coding: utf-8 -*- # @File : tasks.py from __future__ import absolute_import, unicode_literals from celery_tasks import celeryconfig from celery import Celery app = Celery('tasks', config_source=celeryconfig) @app.task def add(x, y): return x + y
配置文件celeryconfig内容是:
# -*- coding: utf-8 -*- BROKER_URL = 'redis://:12345678@127.0.0.1:6379/1' CELERY_RESULT_BACKEND = 'rpc' CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_TASK_RESULT_EXPIRES = 60*30 CELERY_ACCEPT_CONTENT = ['json'] CELERY_TIMEZONE = 'Asia/Shanghai' CELERY_TASK_PUBLISH_RETRY_POLICY = { 'max_retries': 3, 'interval_start': 0, 'interval_step': 0.2, 'interval_max': 0.2 } # 队列 CELERY_QUEUES = { 'add': { 'routing_key': 'add' } } CELERY_ROUTES = { 'tasks.add': { 'queue': 'add', 'routing_key': 'add' } }
4.启动celery:
使用命令celery -A celery_tasks.tasks worker –concurrency=2 –loglevel=debug进行启动,concurrency是启动work的数量,loglevel是日志的级别:
redis中也有了值:
查看一下启动的worker:
看到会有三个进程分布式定时任务,这时由于celery是master-worker的架构模式,一个主进程负责调度,然后多个从进程负责消费具体的任务分布式定时任务,也就是调度器和工作进程。
5.对于 celery任务的使用
redis中也存储了相关计算值:
六、配置文件说明
1.BROKER_URL:broker地址 2.CELERY_RESULT_BACKEND:结果存储地址 3.CELERY_TASK_SERIALIZER:任务序列化方式 4.CELERY_RESULT_SERIALIZER:结果序列化方式 5.CELERY_TASK_RESULT_EXPIRES:任务过期时间 6.CELERY_ACCEPT_CONTENT:指定任务接受的内容类型 7.CELERY_TASK_PUBLISH_RETRY_POLICY:任务发布策略 8.CELERY_QUEUES:队列配置 9.CELERY_ROUTES:路由设置
七、任务状态回调:
1.PENDING:任务等待中 2.STARTED:任务已开始 3.SUCCESS:任务成功 4.FAILURE:任务失败 5.RETRY:任务重试 6.REVOKED:任务取消 7.PROGRESS:任务进行中
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。