当前位置: 首页 > news >正文

Celery-分布式任务队列

1. 定义

Celery 是一个简单、灵活且可靠的分布式系统,用于处理大量消息,同时为作提供维护此类系统所需的工具。
它是一个专注于实时处理的任务队列,同时也支持任务调度

  • 安装
pip install celery

2.celery执行流程

  • producer-生产者
    异步任务、定时任务

  • broker
    消息传输的中间件,生产者一旦有消息发送,将发至broker;【RQ,redis】

  • worker - 工作者
    消费/执行broker中消息/任务的进程

  • backend
    用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需添加要配置相关
    在这里插入图片描述

3.使用celery

  1. 创建异步任务函数[tasks.py] - @app.task
import timefrom celery import Celery# 1.初始化celery对象
# 通过使用本机redis且没有密码,使用远程redis有密码格式为'redis://:密码@ip:6379/1'
app = Celery("dashopt", broker="redis://:@127.0.0.1:6379/1", backend="redis://:@127.0.0.1:6379/1")# 2.创建异步任务函数
@app.task()
def send_message(m, n):print("hahahaha")time.sleep(10)print("哈哈哈哈哈")return m + n
  1. 终端启动worker

    celery -A 文件名 worker -l info

celery -A tasks worker -l info
  1. 将异步任务推送到消息中间件broker中

    异步函数名.delay(参数1, 参数2)
    另外起一个终端shell窗口,执行以下代码

from tasks import send_message
send_message.delay("10", "20")

4.Django和Celery结合流程**

1. 创建django项目

django-admin startproject djcelery

2. 创建celery配置文件【和settings.py同路径】

"""celery配置文件
"""
import os
from celery import Celery
from django.conf import settings# 1.为celery设置环境变量
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djcelery.settings")# 2.初始化celery应用
app = Celery("dashopt", broker="redis://:@127.0.0.1:6379/1")# 3.设置自动发现异步任务
app.autodiscover_tasks(settings.INSTALLED_APPS)

3. 在应用下创建tasks.py【存放异步任务】

import time
from djcelery.celery import app@app.task()
def async_task():print("111")time.sleep(5)print("222")

4. 视图函数中调用异步任务【delay(参数1, 参数2)】

import time
from django.shortcuts import render
from django.http import HttpResponse
from .tasks import async_task# Create your views here.
def test_celery(request):print("hahahahha")# 有一个阻塞任务,比如:发邮件async_task.delay()return HttpResponse(time.strftime("%H:%M:%S"))

5. 终端启动celery

 `celery -A dashopt worker -l info`

6. 浏览器中测试【注册用户】

5.使用场景

Celery 就是 Django 的「分布式任务外挂」——把耗时的、需要异步的、定时的工作丢给它,后台慢慢跑,前端瞬间返回。

场景为什么用 Celery
发送注册邮件 / 短信发邮件慢,用户不能干等 5 秒
图片 / 视频转码CPU 密集,不能阻塞 Web 进程
定时报表每天 0 点自动生成 Excel 并发邮件
秒杀队列高并发先把订单压进队列,后台慢慢写库
http://www.dtcms.com/a/313447.html

相关文章:

  • MySQL深度理解-MySQL锁机制
  • 数据结构学习(day01)
  • 第八章:进入Redis的SET的核心
  • Android系统模块编译调试与Ninja使用指南
  • 【数据分享】各省粮食外贸依存度、粮食波动率等粮食相关数据合集(2011-2022)(获取方式看文末)
  • 【MATLAB】(六)多项式的创建与四则运算
  • python的高校奖助学金系统
  • 23 Active Directory攻击与防护策略解析
  • 编译旧版本的electron内核
  • SpringBoot之整合MyBatisPlus
  • Nvidia Orin DK 刷机CUDA TensorRT+硬盘扩容+ROS+Realsense+OpenCV+Ollama+Yolo11 一站式解决方案
  • 从“配置地狱”到“云端乐园”——Nacos 如何成为分布式微服务配置中心的“定海神针”
  • 数组和指针的关系
  • 操作系统——读者写者问题
  • KNX协议介绍
  • Nvidia Orin + RealSense D435i 与3D地图实现导航
  • Ubuntu系统VScode实现opencv(c++)视频的处理与保存
  • [硬件电路-129]:模拟电路 - 继电器的工作原理、关键指标、常用芯片与管脚定义
  • SpringAI的使用
  • Socket编程——TCP协议
  • 从一到无穷大 #51:突破阿姆达尔定律:COZ因果剖析与串行优化八法
  • Java学习第一百零一部分——网关(Gateway)
  • java测试题(ssm框架)
  • 02.Redis 安装
  • MPLS 静态LSP
  • TV电视版软件集合分享
  • 深入理解Java并发编程:原理、实战与最佳实践
  • Redis 7 中的 Set 和 Zset 使用
  • 基于transformer的目标检测——匈牙利匹配算法
  • 深入解析HashMap:原理与性能优化