Django项目实践(商城):七、Celery介绍和使用

在这里插入图片描述

(根据居然老师直播课内容整理)

一、引言

1、生产者消费者模式的思考

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

2、解决办法:

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

二、celery介绍

1、celery 简介

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

2、安装celery

pip install celery==4.4.7 

三、创建Celery实例并加载配置

1、定义Celery包

  • celery 可以脱离django使用
  • 在根目录上定义celery包:celery_tasks
    在这里插入图片描述
  • main.py 类似Django的manage.py,是celery的入口文件
  • config.py:配置文件

2、创建Celery实例:

# /celery_tasks/main.py 
# celery启动文件
from celery import Celery
# 创建celery实例
celery_app = Celery('lg')

3、加载Celery配置

-将参数保存到 配置文件中:celery_tasks.config.py

# 指定消息队列的位置: redis 10号库
broker_url = "redis://127.0.0.1/10"
  • 加载配置参数 celery_tasks.main.py中
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')

4、定义任务

  • 定义的生产者 celery_app

  • 定义了中间人:broker_url

  • 消费者就是celery本身

  • 还需要定义任务

    • 一般每一个任务都存在独立的一个包中
      • 如本例中发送短信,建立包 sms
    • 在包中,必须创建一个tasks.py (文件名必须是tasks.py),写所有相关的任务
  • 本项目需要任务就是要发送短信(当前短信发送有网络延迟且是同步的,需要把它变成异步的),

  • 在tasks.py中定义一个函数send_sms_code(),函数体内调用发送短信 CCP().send_message()方法

    • CCP类定义在ronglianyun包内,可以直接导入引用,但celery可以独立于Django,所以建议将ronglianyun包在sms包内复制一套,直接导入sms中的ronglianyun包
    • 相当常量,也在sms包里重新定义
    • 短信发送有成功或失败,虽然异步无法处理,还是建议将发送结果做为函数返回值
  • 方法定义完成后,还需要与任务建议关联,本次采用装饰器

    扫描二维码关注公众号,回复: 13005604 查看本文章
    • @celery_app.task()
  • 如果现在运行一下celery会出现下面内容
    在这里插入图片描述

  • 注意事项:

    • 注意当前路径,应该为项目的根目录下,manage.py所在的目录
    • 此时没有任务名称(因为任务还没注册)

5、注册任务

  • 在celery_tasks.main.py中注册任务
    • 只需要写到sms包即可,celery会自动找tasks.py文件,执行绑定的方法
# 注册任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])

在这里插入图片描述

6、启动Celery服务

6.1 linux 环境下启动celery :

celery -A celery_tasks.main worker -l info

6.1 windows 环境下启动celery :

celery -A celery_tasks.main worker -l info --pool=solo

celery -A celery_tasks.main worker -l info -P eventlet
# 需要安装evenlet :pip install eventlet==0.29.1   

7、修改项目中短信发送方式

  • 将原有发送方式改过生产者消费者模式发送
    在这里插入图片描述
# apps/verifications/views.py 
send_sms_code.delay(mobile, sms_code)

8、系统发送短信效果

  • windowns下正常启动celery
    在这里插入图片描述
  • 发送短信

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/laoluobo76/article/details/113548199
今日推荐