celery 集成到 Django 项目中,实现异步任务处理和定时任务处理

本文详细介绍如何在Django项目中集成Celery,实现异步和定时任务处理。包括Celery工作流程、消息中间件、任务执行单元和结果存储介绍,以及在Django中配置Celery的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django 集成 Celery 到项目

本节将 celery 集成到 Django 项目中,实现异步任务处理和定时任务处理
Celery 工作流程
c

Celery 的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。

消息中间件

Celery 本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ

任务执行单元

Worker 是 Celery 提供的任务执行的单元,worker 并发的运行在分布式的系统节点中。

任务结果存储

Task result store 用来存储 Worker 执行的任务的结果,Celery 支持以不同方式存储任务的结果,包括 AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache
在虚拟环境中安装:

在这里插入图片描述
查看集成到 Django 中的 celery 版本, pip freeze

celery3.1.26.post2 django-celery3.2.2 flower==0.9.2

启动 redis 服务, 端口假设为 6379

发现 pip 安装比较慢的情况

pip install pillow -i https://pypi.douban.com/simple
2、Django 中配置

(1)在主工程的配置文件settings.py 中应用注册表INSTALLED_APPS中加入 djcelery
在这里插入图片描述
(2) 在 settings.py 中加入 celery 配置信息
在这里插入图片描述
当 djcelery.setup_loader() 运行时,Celery 便会去查看 INSTALLD_APPS 下包含的所有 app目录中的 tasks.py 文件,找到标记为 task 的方法,将它们注册为 celery task

BROKER_URL:broker 是代理人,它负责分发任务给 worker 去执行。我使用的是 Redis 作为 broker

没有设置 CELERY_RESULT_BACKEND,默认没有配置,此时 Django 会使用默认的数据库(也是你指定的 orm 数据库)。

CELERY_IMPORTS:是导入目标任务文件

CELERYBEAT_SCHEDULER:使用了 django-celery 默认的数据库调度模型,任务执行周期都被存在默认指定的 orm 数据库中.

CELERYBEAT_SCHEDULE:设置定时的时间配置, 可以精确到秒,分钟,小时,天,周等。

(3)创建应用实例

在主工程目录添加 celery.py, 添加自动检索 django 工程tasks任务

vim artproject/celery.py
在这里插入图片描述
(4) 创建任务 tasks

每个任务本质上就是一个函数,在 tasks.py 中,写入你想要执行的函数即可。

在应用 art 中添加我们需要提供的异步服务和定时服务

vim art/tasks.py
在这里插入图片描述
上述我们把异步处理任务add和定时器任务 tsend_email 都放在了 tasks.py

(5)迁移生成 celery 需要的数据表

python manage.py migrate

此时数据库表结构多出了几个
在这里插入图片描述
3、启动服务,测试

我们可以采用 python manage.py help 发现多出了 celery 相关选项。

(1)启动 django celery 服务

启动服务:

python manage.py celery worker --loglevel=info

此时异步处理和定时处理服务都已经启动了

(2)web端接口触发异步任务处理

我们在web端加入一个入口,触发异步任务处理add函数

在应用art的urls.py 中加入如下对应关系
在这里插入图片描述

启动 web 服务,通过 url 传入的参数,通过 handler 的 add.delay(x, y) 计算并存入 mysql

http://127.0.0.1:8000/art/add?x=188&y=22

(4) 测试定时器,发送邮件

在终端输入 python manage.py celerybeat -l info

会自动触发每隔 30s 执行一次 tsend_email 定时器函数,发送邮件:
在这里插入图片描述

具体发送邮件服务程序见下面的第4节
4、邮件发送服务

项目中经常会有定时发送邮件的情形,比如发送数据报告,发送异常服务报告等。

可以编辑文件 art/utils/send_mail.py, 内容编辑如下:
在这里插入图片描述
至此,在 celery ui 界面可以看到两类,定时器处理和异步处理。
5、启动 flower 服务

python manager celery flower
案例
在这里插入图片描述
读书网站实现抢读功能

qd(request, id) :抢读视图函数

quereyQD(request,id) :查询抢读的视图函数

settings.py
在这里插入图片描述
在主工程目录添加 celery.py, 添加自动检索django工程tasks任务

celery.py
在这里插入图片描述
当前 app 目录下建立 tasks.py
在这里插入图片描述
views.py
在这里插入图片描述
前端通过定时器,每秒执行查询函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值