首页 > 其他分享 >Django-rest-framework(DRF)怎么使用celery

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

时间:2024-08-13 20:53:05浏览次数:15  
标签:Celery 异步 rest Django celery 任务 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 os

from celery import Celery

os.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表示定时任务

标签:Celery,异步,rest,Django,celery,任务,CELERY,执行
From: https://blog.csdn.net/hhq2002322/article/details/141171386

相关文章

  • 使用 Flask、Celery 和 Python 实现每月定时任务
    为了创建一个使用Flask、Celery和Python实现的每月定时任务,我们需要按照以下步骤进行:1.安装必要的库我们需要安装Flask、Celery和Redis(作为消息代理)。我们可以使用pip来安装它们:bash复制代码pipinstallflaskceleryredis2.设置Flask和Celery首先,我们需要设......
  • 随机森林分类器(Random Forest Classifier)
    随机森林分类器(RandomForestClassifier,又称为“随机森林”)是一种常用的机器学习算法,它是基于决策树的一种集成学习方法,是一种集成算法(EnsembleLearning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。......
  • 基于django+vue基于单片机及spring框架的高血压患者居家监测系统【开题报告+程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着人口老龄化的加剧和生活方式的改变,高血压已成为全球范围内最常见的慢性疾病之一,其高发病率和并发症的严重性对公共健康构成了严重威胁......
  • 基于django+vue基于宠物服务系统的设计与实现【开题报告+程序+论文】计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快和人们对生活品质要求的提高,宠物已成为许多家庭不可或缺的一员,它们不仅为人们的生活带来了乐趣与陪伴,还承载着情感......
  • 基于django+vue基于web技术的课程思政元素信息交流平台的设计与探索【开题报告+程序+
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在高等教育体系中,课程思政作为提升大学生思想政治素质的重要途径,日益受到重视。然而,当前课程思政资源的整合与分享机制尚不完善,存在信息孤......
  • 基于django+vue基于web点餐小程序的个性化推荐演示录像22023【开题报告+程序+论文】计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在数字化时代,餐饮行业正经历着前所未有的变革。随着智能手机的普及和移动互联网技术的飞速发展,点餐小程序已成为连接消费者与餐厅的重要桥......
  • Django-独立应用教程-全-
    Django独立应用教程(全)原文:DjangoStandaloneApps协议:CCBY-NC-SA4.0一、定义Django独立应用的范围每个软件项目都是由边界定义的,不管你是否有意选择了它们。在这一章中,我们将通过探索开发——和共享——你的独立应用的好处,开始我们的Django独立应用的冒险,以及如何考......
  • 计算机毕业设计django+vue美食网站设计与实现【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在数字化时代,互联网已成为人们日常生活中不可或缺的一部分,特别是在餐饮行业,美食网站凭借其便捷性、丰富性和互动性,正逐步改变着人们的就餐......
  • 计算机毕业设计django+vue祥安保险公司客户关系管理系统【开题+程序+论文】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在数字化转型的大潮中,保险行业正面临着前所未有的机遇与挑战。随着市场竞争的日益激烈,保险公司如何高效地管理客户关系,提升服务质量,增强客......
  • Django 深入理解WSGI协议
    起步惭愧啊,惭愧啊,距离上一篇这个系列的文章已经是半年前的了,随着Django2.0的发布,感觉之前分析的1.10.5版本似乎有点老了,我看了一下,好在和我前面文章分析的内容差异不大,基本上也是可以就着前面的分析内容来品尝最新的django代码。那我接下来阅读的版本就从当前能获取的2.0......