【celery-1】分布式异步任务框架

1 Celery介绍
1.2 celery 使用场景
1.3 Celery官网
1.4 Celery架构
2 Celery 快速使用
3 包结构
4 执行异步–延迟–定时任务
5 Django中集成方式一(通用方案)
6 Django中集成方式二(官方方案)
6.1 在项目目录下新建celery.py
6.2 在django配置文件中加入
6.3 在主目录的__init__.py中添加如下代码
6.4 在app下新建tasks.py(必须叫tasks.py)
6.5 实现异步views.py
6.6 配置路由
6.7 启动celery
7 实现定时任务
7.1 在settings中加入
7.2 启动worker和beat
8 通过Admin配置定时任务
8.1 安装django-celery-beat
8.2 在APP中注册djiango-celery-beat
8.3 在settings.py中设置调度器及时区
8.8 美化admin
9 admin监控任务执行情况
9.3 修改backend配置,将Redis改为django-db

1 Celery介绍

1.1 Celery 是什么?

# 1 celery 是一个灵活且可靠的,处理大量消息的分布式系统,可以在多个节点之间处理某个任务

# 2 celery 是一个专注于实时处理的任务队列,支持任务调度

# 3 celery 是开源的,有很多的使用者

# 4 celery 完全基于 Python 语言编写

# 5 所以 celery 本质上是一个分布式的异步任务调度框架,类似于 Apache 的 airflow

# 6 celery 只是用来调度任务的,但它本身并不具备存储任务的功能,而调度任务的时候肯定是要把任务存起来的。因此要使用 celery 的话,还需要搭配一些具备存储、访问功能的工具,比如:消息队列、Redis缓存、数据库等等。官方推荐的是消息队列 RabbitMQ,我们使用 Redis 

1.2 celery 使用场景

# 1 异步任务
	-一些耗时的操作可以交给celery异步执行,而不用等着程序处理完才知道结果。
    -视频转码、邮件发送、消息推送等等
# 2 定时任务
	-定时推送消息、定时爬取数据、定时统计数据等

# 3 延迟任务
	-提交任务后,等待一段时间再执行某个任务

1.3 Celery官网

# 1 开源地址(源码)
https://github.com/celery/celery
    
# 2  官网
https://docs.celeryq.dev/en/stable/
    
# 4 最新版本
Celery (5.3)

# 5 python支持
Celery version 5.3 runs on
Python ❨3.8, 3.9, 3.10, 3.11# 6 Django支持
Celery 5.3.x supports Django 2.2 LTS or newer versions. Please use Celery 5.2.x for versions older than Django 2.2 or Celery 4.4.x if your Django version is older than 1.11

1.4 Celery架构

# Celery 架构,它采用典型的生产者-消费者模式,主要由以下部分组成:

# 1 Celery Beat,任务调度器,Beat 进程会读取配置文件的内容,周期性地将配置中到期需要执行的任务发送给任务队列。

# 2 Producer:需要在队列中进行的任务,一般由用户、触发器或其他操作将任务入队,然后交由 workers 进行处理。调用了 Celery 提供的 API、函数或者装饰器而产生任务并交给任务队列处理的都是任务生产者。

# 3 Broker,即消息中间件,在这指任务队列本身,Celery 扮演生产者和消费者的角色,brokers 就是生产者和消费者存放/获取产品的地方(队列)。

# 4 Celery Worker,执行任务的消费者,从队列中取出任务并执行。通常会在多台服务器运行多个消费者来提高执行效率。

# 5 Result Backend:任务处理完后保存状态信息和结果,以供查询。Celery 默认已支持 Redis、RabbitMQ、MongoDB、Django ORM、SQLAlchemy 等方式。



实际应用中,用户从 Web 前端发起一个请求,我们只需要将请求所要处理的任务丢入任务队列 broker 中,由空闲的 worker 去处理任务即可,处理的结果会暂存在后台数据库 backend 中。我们可以在一台机器或多台机器上同时起多个 worker 进程来实现分布式地并行处理任务。

在这里插入图片描述

2 Celery 快速使用

2.1 安装

# 0 创建Python项目

# 1 创建虚拟环境

# 2 安装celery
pip install celery

# 3 安装redis(消息队列和结果存储使用redis)
pip install redis

# 4 安装eventlet(win 平台)
pip install eventlet

2.2 快速使用

celery_demo.py–主文件

from celery import Celery
import time

broker = 'redis://127.0.0.1:6379/1'
backend = 'redis://127.0.0.1:6379/2'
app = Celery('celery_test', broker=broker, backend=backend)


@app.task
def add(n, m):
    time.sleep(2)
    print('n+m的结果:%s' % (n + m))
    return n + m


@app.task
def send_email(mail='[email protected]'):
    print('模拟发送延迟--开始')
    time.sleep(2)
    print('模拟发送延迟--结束')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值