时间:2021-05-23
celery简介
celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能被并发地执行在单个或多个职程服务器(worker servers)上。任务能异步执行(后台运行)或同步执行(等待任务完成)。
在生产系统中,celery能够一天处理上百万的任务。它的完整架构图如下:
组件介绍:
工作原理
它的基本工作就是管理分配任务到不同的服务器,并且取得结果。至于说服务器之间是如何进行通信的?这个Celery本身不能解决。所以,RabbitMQ作为一个消息队列管理工具被引入到和Celery集成,负责处理服务器之间的通信任务。和rabbitmq的关系只是在于,celery没有消息存储功能,他需要介质,比如rabbitmq、redis、mysql、mongodb 都是可以的。推荐使用rabbitmq,他的速度和可用性都很高。
Celery安装及使用
1、安装celery
pip install celery
2、查看完整可用命令选项
celery worker --help
3、创建一个工程项目project,然后再项目内创建一个celery_tasks异步任务列表。如图:
4、首先是celery_tasks异步任务主程序main.py,代码如下:
from celery import Celery# 生成celery应用celery_app = Celery("caicai")# 加载配置文件celery_app.config_from_object('celery_tasks.config')# 注册任务celery_app.autodiscover_tasks(['celery_tasks.email']) # 注意:传递的参数是任务列表分析一下这个程序:
5、接着是配置文件config.py,代码如下:
BROKER_URL = 'redis://localhost:6379/1' # 使用Redis作为消息代理CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 把任务结果存在了Redis# CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSONCELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # celery任务结果有效期CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型CELERY_TIMEZONE = 'Asia/Shanghai' # celery使用的时区CELERY_ENABLE_UTC = True # 启动时区设置CELERYD_LOG_FILE = "/var/log/celery/celery.log" # celery日志存储位置6、创建email目录,目录下创建tesks.py文件用来编写发送邮件的代码,代码如下:
import timefrom celery_tasks.main import celery_app@celery_app.task(name='seed_email') # 添加celery_app.task这个装饰器,指定该任务的任务名name='seed_email'def seed(): time.sleep(1) return "我将发送邮件"7、在项目app.py中,采用delay()用来调用任务。
from celery_tasks.email.tasks import seedseed.delay()seed.delay()seed.delay()seed.delay()seed.delay()8、项目运行
首先,我们需要启动redis。接着,切换至proj项目所在目录,并运行命令:
celery -A celery_tasks.main worker -l info
界面如下:
然后,我们运行app.py,app.py调用添加异步任务,输出的结果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
简单使用安装celery及redis定义celery任务项目下新建tasks.pyfromceleryimportCelery#创建一个Celery类的实例对象
起步在《分布式任务队列Celery使用说明》中介绍了在Python中使用Celery来实验异步任务和定时任务功能。本文介绍如何在Django中使用Celery。
Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssi
Hibernate工作原理及为什么要用?原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xm
这篇文章主要介绍了python匿名函数lambda原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考