Celery介绍和使用

目录

1.为什么使用Celery?

2. Celery介绍

3. 创建Celery实例并加载配置

4. 定义发送短信任务

5.启动Celery服务

6. 调用发送短信任务


1.为什么使用Celery?

  • 消费者取到消息之后,要消费掉(执行任务),需要我们去实现。
  • 任务可能出现高并发的情况,需要补充多任务的方式执行。
  • 耗时任务很多种,每种耗时任务编写的生产者和消费者代码有重复。
  • 取到的消息什么时候执行,以什么样的方式执行。

结论:

  • 实际开发中,我们可以借助成熟的工具Celery来完成。
  • 有了Celery,我们在使用生产者消费者模式时,只需要关注任务本身,极大的简化了程序员的开发流程。

2. Celery介绍

  • Celery介绍:

    • 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。
    • 单个 Celery 进程每分钟可处理数以百万计的任务。
    • 通过消息进行通信,使用消息队列(broker)客户端消费者之间进行协调。
  • 安装Celery:

    $ pip install -U Celery
    
  • Celery官方文档

3. 创建Celery实例并加载配置

1.定义Celery包(在主业务逻辑包的同级目录下,新建名字为celery_tasks的包)

2.创建Celery实例(在新建的包下面新建py文件main.py)

 main.py里面编写创建实例的代码

# celery启动文件
from celery import Celery


# 创建celery实例
celery_app = Celery('实例名称')

3.加载Celery配置(新建一个config.py的文件,来编写配置)

  config.py里面添加配置的代码 

# Celery的配置文件

# 指定中间人、消息队列、任务队列、容器,使用redis
broker_url = "redis://192.168.174.129/10"

 加载celery的配置(除了实例名称,其他都是固定写法)

# celery启动文件
from celery import Celery


# 创建celery实例
celery_app = Celery('实例名称')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')

4. 定义发送短信任务

创建发送短信的任务,(例如创建一个sms的包,任务名为tasks.py(固定的)

4.1.注册任务:在main.py下面编写代码

# celery启动文件
from celery import Celery


# 创建celery实例
celery_app = Celery('meiduo')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')
# 自动注册celery任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])

4.2.定义任务:在tasks.py 里面编写定义任务的代码

注:装饰器中的name可以自己定义,最好和本任务有关系.(一般和函数名相对应)

将需要使用的celery的代码,放到编写的函数里面,如果该原来该代码有参数,则还是原样给定义的函数加上参数

from celery_tasks.main import celery_app
# bind:保证task对象会作为第一个参数自动传入
# name:异步任务别名
# retry_backoff:异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s
# max_retries:异常自动重试次数的上限
@celery_app.task(bind=True, name='ccp_send_sms_code', retry_backoff=3)
# 使用装饰器装饰异步任务,保证celery识别任务
@celery_app.task(name='send_sms_code')  # name就是给任务起个别名
def send_sms_code(mobile, sms_code):
    """
    发送短信验证码
    :param mobile: 手机号
    :param sms_code: 短信验证码
    :return: 成功:0   失败:-1
    """
    send_ret = CCP().send_template_sms("*******", "*****", mobile, sms_code)
    return send_ret

5.启动Celery服务

进入到最初创建的celery_tasks的包的路径下,输入命令启动Celery服务

celery -A celery_tasks.main worker -l info
  • -A指对应的应用程序, 其参数是项目中 Celery实例的位置。
  • worker指这里要启动的worker。
  • -l指日志等级,比如info等级。

 运行后可以到,[tasks] 的下面就由我们刚才定义的任务  send_sms_code 

6. 调用发送短信任务

使用celery异步发送短信验证码代替原来的代码,导入定义的任务调用delay()函数

from celery_tasks.sms.tasks import send_sms_code

# 使用Celery发送验证码
send_sms_code.delay(mobile, sms_code)  # 固定的写法,调用delay
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值