一、相关概念
Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。
它是一个任务队列,专注于实时处理,同时还支持任务调度。
二、优点
简单:celery的 配置和使用还是比较简单的, 非常容易使用和维护和不需要配置文件
高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
如果连接丢失或发生故障,worker和client 将自动重试,并且一些代理通过主/主或主/副本复制方式支持HA。
快速:一个单进程的celery每分钟可处理上百万个任务
灵活: 几乎celery的各个组件都可以被扩展及自定制
三、应用场景
1、异步发邮件 , 一般发邮件比较耗时的操作,需要及时返回给前端,这个时候 只需要提交任务给celery 就可以了.之后 由worker 进行发邮件的操作 .
2、比如有些 跑接口的任务,需要耗时比较长,这个时候 也可以做成异步任务
3、定时调度任务等
四、核心模块
1、Task
就是任务,有异步任务和定时任务
2、Broker
中间人,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker。
Celery本身不提供队列服务,推荐用Redis或RabbitMQ实现队列服务。
3、Worker
执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。
4、Beat
定时任务调度器,根据配置定时将任务发送给Broker。
5、Backend
用于存储任务的执行结果。
五、原理图
六、配合redis,django简单使用
#注意:在项目根目录外创建celery工具管理包,与项目根目录平级
创建mycelery包,main文件内容
from celery import Cerely #实例化对象 app = Celery #加载django配置环境 import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目配置文件') import django django.setup() #指定celery加载的配置文件 app.config_from_object('mycelery.config') #指定task任务 app.autodiscover(['mycelery.sms'])
在mycelery根目录下创建config文件,文件内容
#设置队列链接地址,上线后需更改 broker_url = 'redis://127.0.0.1:6379/14' #设置队列链接地址 result_backend = 'redis://127.0.0.1:6379/15'
在mycelery根目录下创建test文件,文件内容
from celery.result import AsyncResult from mycerely.sms.task import sms_code2 #异步获取结果 res = sms_code2.delay() async_task = AsyncResult(id = res.id,app=sms_code2) result = async_task .get()
在mycelery根目录下创建sms包,在sms下创建tasks文件,文件内容
#使用celery实例化后的对象去调用task方法 #获取手机号及短信验证码并验证 @app.task(name='smsCode') def sms_codes(phone,sms_code): ret = send_message(settings.sms_INFO.get('TID'),phone,(sms_code,contains.SMS_CODE_EXPIRE_TIME // 60)) #判断短信是否发送成功 if not ret: return '短信发送失败,手机号{}'.format(phone) return '短信发送成功'
在django项目管理包settings中创建文件contains(存放常量)
#设置短息有效时间 SMS_CODE_EXPIPE_TIME = 60*10 #设置短信发送间隔时间 SMS_CODE_INTERVAL_TIME = 60
在django项目管理包settings中设置redis短信存储的地址
CACHES = { "sms_code":{ "BACKEND":"django_redis.cache.RedisCache", "LOCATION":"redis://127.0.0.1:6379/2", "OPTIONS":{ "CLIET_CLASS":"django_redis.client.DefaultClient" } } }
七、注意
#以上代码配置复杂,请根据实际项目地址修改内容 #配置过程中如有问题欢迎探讨
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通