celery----异步任务、延时任务、定时任务

news2025/1/12 12:05:08

        Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。它的架构组成如下图 :

 

 1.异步任务

小案例:

 --demo.py      --------产生app对象

--add_task.py ---------提交任务

--check_add.py   -----查看任务进程

1.1demo,py

        from celery import Celery
        import time
        broker = 'redis://127.0.0.1:6379/1'        # 消息中间件 redis
        backend = 'redis://127.0.0.1:6379/2'        # 结果存储 redis
        app = Celery(__name__, broker=broker, backend=backend)
        @app.task               #变成celery的任务了
        def add(a, b):
            print('运算结果是',a + b)
            time.sleep(1)
            return a + b

1.2 启动worker(worker监听消息队列,等待别人提交任务,如果没有就卡再这)
        

注意:要将路径切换到demo.py的上一层

 celery -A demo worker -l info -P eventlet

1.3 别人提交任务,提交完成会返回一个uuid号,后期使用uuid号查询,至于这个任务有没有被执行,取决于worker有没有启动

     add_task.py

	from demo import add
		res=add.delay(77,66)

1.4.查看任务结果

        check_add.py             

        from demo import app      #导入app路径
        # celery的包下
        from celery.result import AsyncResult

        id = '042a8fc1-6b0f-4ad6-bf72-edefa657a52f'
        if __name__ == '__main__':
            a = AsyncResult(id=id, app=app)
            if a.successful():  # 正常执行完成
                result = a.get()  # 任务返回的结果
                print(result)
            elif a.failed():
                print('任务失败')
            elif a.status == 'PENDING':
                print('任务等待中被执行')
            elif a.status == 'RETRY':
                print('任务异常后正在重试')
            elif a.status == 'STARTED':
                print('任务已经开始被执行')

2.包结构celery

以后都这样创建    创建有一个包

        -celery_task       -------包

                -__init__

                -celery.py      --------必须叫这个名字      放定时任务、里面实例化得到app对象

     from celery import Celery
    broker = 'redis://127.0.0.1:6379/1'  # 消息中间件 redis
    backend = 'redis://127.0.0.1:6379/2'  # 结果存储 redis
    app = Celery(__name__, broker=broker, backend=backend, include=['celery_task.course_task','celery_task.home_task','celery_task.user_task'])

参数:include------任务的地址

启动worker,以包启动,来到包所在路径下

  celery -A 包名 worker -l info -P eventlet
  celery -A celery_task worker -l info -P eventlet

3.延时任务

  延时任务和异步任务差不多,唯一的不同就是提交任务的不同

        异步任务提交

from celery_task.user_task import send_sms
res=send_sms.delay(188888888,2546)            #提交任务
print(res)

延时任务的提交

需要你先计算好你需要延时多长时间

小案例:延时10秒

  1.还要先去celery,py去配置国际化

        

# 配置国际化
app.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
app.conf.enable_utc = False

 提交任务

from datetime import datetime,timedelta

# print(datetime.utcnow())                    #utc时间  与咱们相差8个小时
# print(eta_second(10),'dddddddddd')
# print(timedelta(seconds=10))                   #0:0:0:10
time_delay=timedelta(seconds=10)
t_time=datetime.now()               #配置国际化后,用now()
eta=time_delay+t_time

from celery_task.user_task import send_sms

res=send_sms.apply_async(kwargs={'mobile': '1896334234', 'code': 8888}, eta=eta)

4.定时任务

4.1在app所在的文件下配置,也就是在celery.py中


	- 1 配置
	app.conf.beat_schedule = {
        'send_sms': {   #定时任务的名称,可以随便起       
            'task': 'celery_task.user_task.send_sms', #定时任务的路径指定函数,send_sms-》函数
            'schedule': timedelta(seconds=5),         #五秒执行一次
            'args': ('1822344343', 8888),             #给函数传参,没有可以不传
        },
        'add_course': {
            'task': 'celery_task.course_task.add_course',
            # 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点
            'schedule': crontab(hour=11, minute=38),  # 每天11点35,执行
            'args': (),
        }
    }

4.2提交定时任务需要借助于beat

        启动worker的路径下启动beat   

celery  -A 包名 beat -l info 
celery  -A celery_task beat -l info 

启动worker

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

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

相关文章

初学帆软踩得坑——数据填报_Excel数据导入

第一次做数据填报,按照教程做完在用excel导入工具本地数据报表的时候出现 1、整块空白合并单元格,数据无法填入的现象 2、表格重新导入一批,无法成功入库,导致只能导入一次,如下图: 说明:点击…

python网络编程(四),用面向对象方式实现文件上传下载

一:背景 在之前已经实现了文件的下载,现在再来完善上传功能,并且使用面向对象来封装,让代码看起来更加清楚明了。 二: 使用规则和运行结果 下载文件,下载格式 get 文件名 get空格后面直接接文件名称&…

MySQL-SQL InnoDB引擎 (下)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

直播预约通道: 【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

朴素模式匹配算法(暴力寻找字串)

目录 0. 前言1. 算法简介2. 代码实现3. 运行结果 0. 前言 使用朴素模式匹配算法查找子串是否位于主串中 开发环境:Dev-Cpp 操作系统:Windows10 专业版 1. 算法简介 朴素模式匹配算法,也称为暴力模式匹配算法或穷举法,是一种简…

自己动手写C语言float浮点数转换字符串的函数

最近在项目中用到了holtek厂商的HT45F24A和BA45F5650两款单片机。 用的开发工具是HT-IDE3000,烧录软件是HOPE3000。 这两款单片机都是8位的单片机,支持寄存器位操作。 HT45F24A单片机不带UART串口,要想实现串口功能,只能自己用定时…

基于肺部图片与文本信息的多模态模型架构

文章题为 「A transformer-based representation learning model with unified processing of multimodal input for clinical diagnostics」 https://www.nature.com/articles/s41551-023-01045-x (arXiv版链接: https://arxiv.org/abs/2306.00864) htt…

2020年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

2020 级考研管理类联考数学真题 一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。 1、某产品去年涨价 10%&#xf…

备战2024秋招面试题-Vue的框架原理

前言: \textcolor{Green}{前言:} 前言: 💞快秋招了,那么这个专栏就专门来记录一下,同时呢整理一下常见面试题 💞部分题目来自自己的面试题,部分题目来自网络整理 给我冲 学习目标&am…

阿里云服务器ECS介绍_云主机_服务器托管_弹性计算

阿里云服务器安全可靠、弹性可伸缩,CPU可选256核、内存选到3072GB,云服务器ECS规格通用型、计算型、内存型、通用算力型、裸金属、GPU、大数据等ECS实例规格,公网带宽可选到200M,绑定弹性公网EIP带宽可达1000M,共享带宽…

9.外部中断

1.中断概念: (1)STM32的每个IO口都可以作为外部中断输入; (2)stm32的中断控制器支持19个外部中断/事件请求 线0~15:对应外部IO口的输入中断;线16:连接到PVD输出&#…

基于jsp+Servlet+mysql的汽车销售系统

基于jspServletmysql的汽车销售系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.首页4.购物车5.添加车辆6、编辑车辆信息 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的汽车销售系统 项目架…

新后端漏洞之----SSRF漏洞(服务端请求伪造)

笔记 前言SSRF漏洞概述SSRF漏洞检测与挖掘SSRF漏洞的回显分类SSRF漏洞利用SSRF漏洞防御 前言 这几天各种技术面试接踵而至,压得我喘不过气了!然后面试官问了我这个SSRF漏洞原理和利用方式以及防御手段,当然同时还问了好几个Top10漏洞&#x…

【React】React Hooks解析

React Hooks解析 React 16.8 认识和体验Hooks 为什么需要Hook? Hook是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期) 我们先来思考一下class组件相对于函数式组件有什么优势&…

企业知识竞赛答题pk活动怎么做?

随着互联网的发展,越来越多的企事业单位开始利用答题小程序进行线上PK答题活动,目的在于组织员工学习企业文化或是进行专题答题活动以适应时代的进步。其中最主流的有:网络安全知识竞赛、安全生产知识竞赛、企业文化PK答题竞赛、红色党史知识…

js中的树以及优先遍历!

树 什么是树? 在生活中,大家对树肯定不陌生,小朋友都知道树不就是一类植物嘛,不管在任何地方都有各种各样的树。但是在计算机科学里面树是什么呢?一种分层数据的抽象模型,在我们前端工作中无处不在。在 J…

攻克数据中心液冷升级三大难题,宁畅推出“无忧焕液计划“

近年来,在政策引导、市场需求、技术升级等多种因素影响下,数据中心正在迎来发展新机遇。如何部署节能技术并兼顾算效、能耗、成本,成为考验数据中心建设与运营者的关键。 在此背景下,宁畅于6月28日召开“无忧焕液 智惠升级”媒体沟…

epoll反应堆

// epoll基于非阻塞I/O事件驱动 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/epoll.h> #inclu…

利用Python分析快手APP全国大学生用户数据

背景 背景&#xff1a;利用Python分析快手APP全国大学生用户数据&#xff0c;发现&#xff1a; 哪个学校的学生最喜欢使用快手APP Android、IOS、PC三大平台用户占比份额 全国哪些城市(学校所在地)的学生使用频次最高 全国哪些省份的生源最喜欢使用快手APP … 数据&#xff1a…

形式化验证,Gap-free Processor Verifification by S2QED and Property Generation(一)

目录 一、Article:文献出处&#xff08;方便再次搜索&#xff09; &#xff08;1&#xff09;作者 &#xff08;2&#xff09;文献题目 &#xff08;3&#xff09;文献时间 &#xff08;4&#xff09;引用 二、Data:文献数据&#xff08;总结归纳&#xff0c;方便理解&am…