大虾

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

官方文档

https://docs.celeryq.dev/

读官方文档是必要的学习方法之一,耐心跟着文档操作会有很大的收获。

简单理解celery

celery是一个python的一个异步框架,可分布式、也可做定时任务,需要使用命令启动。它是一个典型的生产者 - 中间人 - 消费者模式,生产者负责生产数据,中间人实现队列,消费者拿到数据执行具体的任务。在celery中:

  • 生产者
    是指执行任务的入口,比如django的一个注册功能需要手机验证码,用户注册时调用的views就是生产者,发验证码的函数就可以视为消费者。views将用户注册的手机号交给消费者来发短信后,就可以立即响应用户,无需等待发短信完成,从而实现了异步的目的。
  • 消费者
    同样的,按照上方的例子,发短信就是消费者了。

前提条件

要想运行celery,需要在当前的python环境安装celeryredispython库(使用celery作为消息中间件)和redis服务器,并且需要先在当前环境中启动redis服务器。

在windows中,还需要安装eventlet,这是一个python库,celery在windows需要这个库的支持。经过测试,不使用这个库,celery没办法正常工作,暂不清楚是不是我使用的方法有问题才导致的

简单演示

这是最简单的演示,不适合复杂的项目。

  • 在目录下创建一个初始化文件名为celery_basic.py,内容如下:
import time
from celery import Celery

# 初始化一个celer实例,并传入消息中间件地址和结果保存地址
app = Celery('celery_demo', broker='redis://127.0.0.1:6379/3', backend='redis://127.0.0.1:6379/4')

@app.task
def send_msg(msg):
    print('开始发送信息')
    time.sleep(5)
    print('信息发送完毕')

这个文件将celery初始化、配置和生产者send_msg写到了一起,小需求还是可以使用的,再复杂一点就需要抽象成一个独立的模块了。

  • 接下来,再写一个生产者,由生产者调用消费者,命名为do.py,内容如下:
from celery_basic import send_msg

for i in range(3):
    send_msg.delay('注册成功')
  • 启动celery程序

到这里,celery还不能工作,需要通过命令行启动程序,启动后,celery会自动监听注册在其中的任务,此时,消费者就会自动监听redis,如果有生产者往里面放数据,消费者就会消费数据。启动命令:

celery -A celery_basic worker -l info -P eventlet
  • 运行生产者即do.py即可看到运行结果
    image

在下一盘中,我们要引入配置文件的方式。

posted on 2022-08-22 10:13  一灯编程  阅读(90)  评论(0)    收藏  举报