• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
菩提叶子
博客园    首页    新随笔    联系   管理    订阅  订阅
celery

一、相关概念

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"
            }
    }
}    

七、注意

#以上代码配置复杂,请根据实际项目地址修改内容
#配置过程中如有问题欢迎探讨

 

posted on 2022-11-03 16:54  菩提叶子  阅读(209)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3