celery介绍
Celery是由Python开发、简单、灵活、可靠的分布式任务队列,是一个处理异步任务的框架,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。Celery侧重于实时操作,但对调度支持也很好,其每天可以处理数以百万计的任务。特点:
- 简单:熟悉
celery的工作流程后,配置使用简单 - 高可用:当任务执行失败或执行过程中发生连接中断,
celery会自动尝试重新执行任务 - 快速:一个单进程的
celery每分钟可处理上百万个任务 - 灵活:几乎
celery的各个组件都可以被扩展及自定制
Celery由三部分构成:
- 消息中间件(Broker):官方提供了很多备选方案,支持
RabbitMQ、Redis、Amazon SQS、MongoDB、Memcached等,官方推荐RabbitMQ - 任务执行单元(Worker):任务执行单元,负责从消息队列中取出任务执行,它可以启动一个或者多个,也可以启动在不同的机器节点,这就是其实现分布式的核心
- 结果存储(Backend):官方提供了诸多的存储方式支持:
RabbitMQ、Redis、Memcached,SQLAlchemy,Django ORM、Apache Cassandra、Elasticsearch等
工作原理:
- 任务模块
Task包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往消息队列,而定时任务由Celery Beat进程周期性地将任务发往消息队列; - 任务执行单元
Worker实时监视消息队列获取队列中的任务执行; Woker执行完任务后将结果保存在Backend中;
django应用Celery
django框架请求/响应的过程是同步的,框架本身无法实现异步响应。但是我们在项目过程中会经常会遇到一些耗时的任务, 比如:发送邮件、发送短信、大数据统计等等,这些操作耗时长,同步执行对用户体验非常不友好,那么在这种情况下就需要实现异步执行。异步执行前端一般使用ajax,后端使用Celery。
项目应用
django项目应用celery,主要有两种任务方式,一是异步任务(发布者任务),一般是web请求,二是定时任务
异步任务redis
1.安装celery
pip3 install celery
2.celery.py
在主项目目录下,新建 celery.py 文件:
import os
import django
from celery import Celery
from django.conf import settings
# 设置系统环境变量,安装django,必须设置,否则在启动celery时会报错
# celery_study 是当前项目名
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_demo.settings.py')
django.setup()
app = Celery('celery_demo')
app.config_from_object('django.conf.settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
注意:是和settings.py文件同目录,一定不能建立在项目根目录,不然会引起celery这个模块名的命名冲突
同时,在主项目的init.py中,添加如下代码:
from .celery import celery_app
__all__ = ['celery_app']
3.settings.py
在配置文件中配置对应的redis配置:
# Broker配置,使用Redis作为消息中间件
BROKER_URL = 'redis://127.0.0.1:6379/0'
# BACKEND配置,这里使用redis
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'

本文详细介绍了如何在Django项目中集成Celery实现异步任务和定时任务。从Celery的基本概念、安装配置到实际应用,包括任务的发布、执行、结果获取、定时任务的配置以及任务的监控。通过实例展示了Celery的使用,如通过redis作为消息中间件,使用flower进行任务监控,帮助提升项目效率和用户体验。
最低0.47元/天 解锁文章
详解异步任务框架Celery&spm=1001.2101.3001.5002&articleId=117503104&d=1&t=3&u=d7d67362e6ae41e089478eb0c1900cc1)
3583

被折叠的 条评论
为什么被折叠?



