celery异步框架的使用

文章目录

  • celery的介绍
  • celery的架构
  • celery的快速使用
  • celery 包结构
  • celery 定时 异步 延迟任务
  • django使用celery

celery的介绍

celery是什么?
-翻译过来是芹菜
-官网:https://docs.celeryq.dev/en/stable/
-吉祥物:芹菜
-分布式的异步任务框架
- 分布式:一个任务,拆成多个任务在不同机器上做
- 异步任务:后台执行,不阻塞主任务
- 框架:集成到项目中

celery主要的几个功能

1 异步任务
异步发邮件,短信,通知
\
2 延迟任务
延迟 几秒 再执行某个任务
订单提交后,延迟半小时,把订单取消
\
3 定时任务
-每隔多长事件 执行某个任务
- 定时更新缓存

celery的架构

django和celery是一个服务
在这里插入图片描述

celery的三个模块

1 broker:消息中间件,消息队列,任务中间件
-存储任务(函数):发送短信任务,统计在线人数。。。
-redis,reabbitmq 存储
-字符串形式,能把任务表示出来即可
函数名,函数参数,函数位置

2 worker:任务执行单元
-从消息队列[broker–》redis]—》取出任务执行—>程序(进程)

3 backend:结果存储 Result Stores
-任务执行完成后的结果存储在这里
-redis存储,关系型数据库。。


执行流程

1 其他程序—》提交任务(函数)—》任务序列化后存到celery的broker中

2 接下来:worker执行—》从broker中取任务–》执行

3 任务执行完后,把结果存到 bancked中

celery和其他程序是 独立运行的
在这里插入图片描述

    """1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)2)celery服务为为其他项目服务提供异步解决任务需求的注:会有两个服务同时运行,一个是项目服务(django),一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求人(django)是一个独立运行的服务 | 医院(celery)也是一个独立运行的服务正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求"""

celery的快速使用

pip celery install

#  可以把这个文件封装成一个包 以后直接调用即可
from celery import Celery
import time# 提交任务的地址 注意 必须是单引号  不然会报错
broker = 'redis://127.0.0.1:6379/1'# 完成任务之后的结果存储地址
backend = 'redis://127.0.0.1:6379/2'# add是任务名字  broker提交任务地址  任务完成地址
# 写任务---》写函数---》必须用 @app.task 装饰---》装饰后,就变成了celery的任务了
app = Celery('app',broker=broker,backend=backend)
# 自己设置任务
@app.task
def add():time.sleep(2)return 'hello'@ap.task
def add1(a,b):time.sleep(2)return a+b# 在调用的文件 
from demo import add,add1# 同步执行 只需要加上括号即可 直接等待之后得到结果
# res = add()
# print(res)# 异步执行 提交上去得到一个任务id号
res = add.delay()
print(res)# 如果有参数 直接传即可
res1 = add1.delay(3,4)
print(res1)# 启动执行任务命令
如果是win系统 需要在安装一个模块 pip3 install eventlet###win运行:
pip3 install eventlet
celery -A 是指定命令 deno 是执行函数的文件名记得切换路径 worker -l info 指定级别
celery -A demo worker -l info -P eventlet任务执行完成这个 会阻塞在哪里等待新任务的提交####非win运行:mac linux
celery -A demo  worker -l info# 查询结果 可以查询执行状态和结果
from demo import app
from celery.result import AsyncResult
id = '5a7af383-6a4a-456e-b33b-43d5618f1208'
if __name__ == '__main__':a = AsyncResult(id=id, app=app)if a.successful():result = a.get() # hello worldprint(result)elif a.failed():print('任务失败')elif a.status == 'PENDING':print('任务等待中被执行')elif a.status == 'RETRY':print('任务异常后正在重试')elif a.status == 'STARTED':print('任务已经开始被执行')

celery 包结构

-celery_task-celery.py-user_task.py-order_task.py-goods_task.py包下必须有一个celery的文件 所有任务一定要注册到 include中
from celery import Celery
#####1 实例化得到对象#######
broker = 'redis://127.0.0.1:6379/1'
backend = 'redis://127.0.0.1:6379/2'
app = Celery('app', broker=broker, backend=backend,include=['celery_task.order_task','celery_task.user_task'])
#######2 写任务 ##########以后各种类型任务,单独写在py文件中-其他程序中提交任务
add_task_package.py
-其他程序中查询结果
get_result_package.py启动 workera切换路径到路径上一级启动 比如 cd到celery_task的上一级即可 包名文件

celery 定时 异步 延迟任务

from celery_task.user_task import send
from celery_task.order_task import order_of# 异步任务 任务函数.delay(参数)
res = send.delay('15800089521','3216')
print(res)# 延迟任务 
from datetime import datetime, timedelta# # 当前时间 加 上 自己设置的时间 后面需要自己修改一下配置文件 当前时间是utc时间
eta = datetime.utcnow() + timedelta(seconds=20) # minutes=3 可以修改时间单位# # args指定参数 eta指定时间延迟的时间
res = order_of.apply_async(args=['100860'], eta=eta)
print(res)# 定时任务 单独写一个文件# 定时任务
# 定时任务--》一定要启动beat
# 在celery.py 中写# 时区
app.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
app.conf.enable_utc = False
# 任务的定时配置
from datetime import timedelta
from celery.schedules import crontabapp.conf.beat_schedule = {'send_sms': {'task': 'celery_task.user_task.send','schedule': timedelta(seconds=8), # 每隔多久发一次# 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点'args': ('1896388888', '6666'),  # 执行任务的函数 需要几个参数传几个}# 'cancle_order': {#     'task': 'celery_task.order_task.cancel_order',#     # 'schedule': timedelta(minutes=30),#     'schedule': crontab(hour=11, day_of_week=1, minute=21),  # 每周一早八点#     'args': ('9999999',),# },
}# 启动beat---》每隔一段时间,就提交任务
# celery -A celery_task beat  -l info# 启动worker
# celery -A celery_task worker -l info -P eventlet
# 两个都要启动 一个是执行任务 一个是提交任务 就不需要我们手动启了

django使用celery

# celery中如果用到django的配置文件 必须加上一句话from celery import Celeryimport os
# 异步任务使用到django的配置 必须要添加这一句加载配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.dev')# 提交任务的地址 注意 必须是单引号  不然会报错
broker = 'redis://127.0.0.1:6379/1'# 完成任务之后的结果存储地址
backend = 'redis://127.0.0.1:6379/2'# add是任务名字  broker提交任务地址  任务完成地址
app = Celery('app',broker=broker,backend=backend,include=['celery_task.order_task','celery_task.user_task'])# 任务函数
from .celery import app
from libs.sms_sen import common_send_sms@app.task
def send(phone, code):common_send_sms(mobile=phone,code=code).delay()  # 掉用封装好的短信return '手机号:%s,发送验证码:%s,成功' % (phone, code)# 视图类中# 使用celery异步发送短信
class Celery_send_sms(ViewSet):def create(self,request):mobile = request.data.get('mobile')code = '8888'res = send.delay(phone=mobile,code=code)print(res)return APIResponse('手机号%s短信发送成功' % mobile)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/682197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解汉诺塔:递归树与纯函数编程

1. 汉诺塔问题为什么有解 相信只要接触过编程就会知道什么是汉诺塔问题: 有三根柱子,分别标记为A、B和C。初始时,在柱子A上按从大到小的顺序堆叠着若干个圆盘。目标是将所有的圆盘从柱子A移动到柱子C。在移动过程中可以借助柱子B作为辅助&a…

文件上传-第三方服务阿里云OSS

JAVA后端实现文件上传,比如图片上床功能,有很多实现方案,可以将图片保存到服务器的硬盘上。也可以建立分布式集群,专门的微服务来存储文件常见的技术比如Minio。对于中小型公司,并且上传文件私密性不高的话可以使用第三方的存储服务,比如阿里云、华为云等…

Mysql中关于on,in,as,where的区别

目录 Mysql on,in,as,where的区别 Mysql语句问题解决 1、left join数据筛选问题 2、相同数据重复筛选使用问题 3、根据某个字段排序取每个类别最后三条数据或前三条数据 4、业务逻辑书写位置问题 5、查找另一表内和本表相关字段的数量 6、关于union的使用 7、limit的巧…

波奇学Linux:文件缓冲区

问题导入 文件流输出直接向显示器和重定向文件有不一样的表现 分别向显示器文件输出四个语句,最后fork创建子进程。 当程序运行时和程序重定向到文件中,输出的内容不一样。 重定向时c库函数(printf,fprintf,fwrite)调用了两次&…

掌握C语言文件操作:从入门到精通的完整指南!

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 什么是文件 文件其实是指一组相关数据的有序集合。这个数据集有一个名称&a…

第12讲创建图文投票实现

创建图文投票实现 图文投票和文字投票基本一样&#xff0c;就是在投票选项里面&#xff0c;多了一个选项图片&#xff1b; <view class"option_item" v-for"(item,index) in options" :key"item.id"><view class"option_input&qu…

《金融人工智能:用python实现ai量化交易》

融合了数学、python、深度学习以及金融知识&#xff0c;是本推荐的好书。请收藏本文&#xff0c;读后再给大学总结。

在Meteor Lake平台上使用NPU进行AI推理加速

在Meteor Lake平台上&#xff0c;英特尔通过神经处理单元 (NPU) 将人工智能直接融入芯片中&#xff0c;实现桌面电脑平台的AI推理功能。神经处理单元 (NPU) 是一种专用人工智能引擎&#xff0c;专为运行持续的人工智能推理工作负载而设计。与即将推出的支持深度人工智能集成的 …

Java+SpringBoot构建智能捐赠管理平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Java学习18-- Override方法重写【★】

重点&#xff1a;super类 & 方法重写 ★看不明白多看几遍&#xff0c;记住static优先级>>高于override 重写Override methods★ 重写Override&#xff1a;child class可以覆盖father class中的method&#xff0c;即子类child class和父类father class有相同名称、…

Git简单了解

文章目录 1、Git概述2、Git下载与安装3、Git代码托管服务3.1、使用码云托管服务 1、Git概述 什么是Git Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛使…

python+vue+django体育场地器材预约管理系统dyn9h

技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm .体育馆管理系统有管理员和用户两个角色。用户功能有场地…

springboot742餐厅点餐系统

springboot742餐厅点餐系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

面试前的准备

面试前的准备 Java程序员校招与社招的区别 校招和社招都是企业招聘形式的一种&#xff0c;只是面向的对象不同。校招 只允许在校生参加&#xff0c;社招理论上是任何人都能参加的(包括在校生)。 但是&#xff0c;无论是社招还是校招&#xff0c;它的难度都取决于你的水平高低。…

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第二套区块链系统部署与运维

第二套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 docker: 20.10.21 webase-deploy : 1.5.5 mysql: 8.0.34 子任务1-2-1: 搭建区块链系统并验证(4分) 使用build_chain.sh 脚本文件进行搭建区块链 ,要求: 四节点,默认配置,单机,docker root@192-168-19…

STM32—DHT11温湿度传感器

文章目录 一.温湿度原理1.1 时序图 二.代码 一.温湿度原理 1.1 时序图 (1).下图一是DHT11总的时序图。 (2).图二对应图一的左边黑色部分&#xff0c;图三对应图一的绿色部分&#xff0c;图四的左部分图对应图一的红色部分&#xff0c;图四的右部分对应图一的黄色部分。 (3)…

【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

内网穿透 | 推荐两个免费的内网穿透工具

目录 1、简介 2、Ngrok 2.1、下载安装 2.2、运行 2.3、固定域名 2.4、配置多服务 3、cpolar 3.1、下载安装 3.2、运行 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应…

CSRNET图像修复,DNN

CSRNET图像修复 CSRNET图像修复&#xff0c;只需要OPENCV的DNN

FastAI 之书(面向程序员的 FastAI)(三)

原文&#xff1a;www.bookstack.cn/read/th-fastai-book 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第五章&#xff1a;图像分类 原文&#xff1a;www.bookstack.cn/read/th-fastai-book/0661b9d7375f45ab.md 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4…