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

Django-rest-framework(DRF)怎么使用celery

目录

一、什么是celery

1、celery简介

2、celery的使用场景

3、celery的架构

二、Django使用celery

1、安装celery

2、Django配置

三、定时任务和异步任务


一、什么是celery

1、celery简介

Celery是一个基于Python开发的分布式异步消息任务队列,它专注于实时处理的异步任务队列,同时也支持任务调度。Celery的设计哲学是简单、灵活且可靠,能够处理大量消息,适用于多种场景下的任务调度和执行。celery官网是:Celery - Distributed Task Queue — Celery 5.4.0 documentation (celeryq.dev)

2、celery的使用场景

异步任务:将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等。

定时任务:利用Celery的定时任务功能,可以定时执行某些任务,如每天的数据统计、定时清理缓存等。

分布式任务调度:在分布式系统中,Celery可以作为任务调度的中心,协调各个节点上的任务执行。在分布式系统中,Celery可以作为任务调度的中心,协调各个节点上的任务执行。

3、celery的架构

消息中间件(Broker:作为任务的中间人(Broker),负责接收和分发任务消息。Celery本身不提供消息中间件,但可以与第三方提供的消息中间件集成,如RabbitMQ、Redis等。

任务执行单元(Worker):是Celery处理任务的执行单元,Worker并发的运行在分布式的系统节点中,持续不断地监视任务队列,并从中获取新的任务进行处理。

任务执行结果存储(backend:用于存储Worker执行的任务结果,Celery支持以不同方式存储任务的结果,如Mysql、Redis等。

二、Django使用celery

1、安装celery

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple celery

如果是window系统还需要安装一个eventlet库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple eventlet

2、Django配置

在settings文件下配celery

CELERY_BROKER_URL = 'redis://127.0.0.1:6379/2'  # broker的配置
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/3'  # backend的配置
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'  # 时区配置
CELERY_TASK_RESULT_EXPIRES = 60*60*24  # 任务过期时间

新建celery.py文件,必须与settings.py同级目录,再在celery.py里面写入下面代码,其中第3行代码的setting

import osfrom celery import Celeryos.environ.setdefault("DJANGO_SETTINGS_MODULE", "house.settings")#将house换成你自己的项目名字app = Celery('proj')app.config_from_object('django.conf:settings', namespace='CELERY')app.autodiscover_tasks()

在同级的__init__.py文件里写入下面代码

from .celery import app as celery_app__all__ = ('celery_app',)

然后在app目录下新建task.py文件,这个文件是我们要执行的异步任务,定时任务这些,只能用task命名,为了区别是clery执行的任务所以我们还需给这个函数加上装饰器@shared_task,当然这里面的函数是我们自己定义的,可以是发送邮件等其它逻辑,但是必须要加上装饰器。

from celery import shared_task@shared_task
def add(x,y):return x+y

提交任务到消息中间件,所以我们需要用到Django视图函数来执行这个函数delay是执行异步任务的,add的参数也需要写到delay里面,执行这个视图函数并不是运行了,只是提交了运行这个函数的任务

class AddView(APIView):def get(self, request):sum_ = add.delay(1, 2)  # add是函数的名字,delay是提交异步任务到队列中,但是还没有执行print(sum_)print(sum_.get())return Response(data='ok')

要执行这个任务需要celery的worker,所以我们要在终端输入以下命令来启动worker

celery -A house worker -l info -P eventlet  #要将house换成django项目的名字

切换到django终端看视图的执行结果,这样就运行成功了成功了,在切换django的终端查看运行结果

三、定时任务和异步任务

sum_ = add.delay(1, 2)  #delay提交异步任务
sum_ = add.apply_async(args=[1,2],eta='什么时候执行')  #apply_async表示定时任务

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#身份核验接口-身份证查询接口-身份证实名制API
  • TinaSDKV2.0 Kernel基本开发
  • 算法【Java】 —— 滑动窗口
  • C# 将Dll嵌入exe中发布
  • xss.function靶场(hard)
  • ECMAScript6块级声明:let声明、const声明
  • zabbix7.0 设置中文语言( Debian GNU/Linux 12)
  • pox破晓工作流部署过程
  • 【自动驾驶】无人驾驶中的“先验”和“后验”
  • 【ARM 芯片 安全与攻击 5.4 -- Meltdown 攻击与防御介绍】
  • C++入门——03内存管理
  • 数据结构----链表
  • 【iOS】—— 离屏渲染
  • REPO转GIT遇一问题
  • Linux - 权限
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 《深入 React 技术栈》
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 08.Android之View事件问题
  • echarts的各种常用效果展示
  • LeetCode29.两数相除 JavaScript
  • vue2.0项目引入element-ui
  • 电商搜索引擎的架构设计和性能优化
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何解决微信端直接跳WAP端
  • 如何使用 JavaScript 解析 URL
  • 使用 @font-face
  • FaaS 的简单实践
  • zabbix3.2监控linux磁盘IO
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.proxy和$.extend
  • $GOPATH/go.mod exists but should not goland
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)虚拟机的安装与使用,linux系统安装
  • (2015)JS ES6 必知的十个 特性
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (分类)KNN算法- 参数调优
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十八)Flink CEP 详解
  • (十八)SpringBoot之发送QQ邮件
  • (四) Graphivz 颜色选择
  • (一)基于IDEA的JAVA基础12