首页 > 编程语言 >python学习笔记-celery介绍和使用

python学习笔记-celery介绍和使用

时间:2023-09-09 20:04:05浏览次数:46  
标签:python worker 笔记 celery beat 任务 定时 执行

一、celery介绍

1、简介

celery是分布式任务队列
celery在执行任务时需要一个消息中间件来接收和发送消息,以及存储结果,一般使用rabbitmq,redis

celery的优先:
简单:配置和使用比较简单
高可用:当任务失败或执行过程中连接中断,celery会自动尝试重新执行
快速:每分钟可处理上百万个任务
灵活:几乎celery每个组件都可以被扩展和自定制

celery的工作流程:

2、定时任务

2.1、linux的定时任务

crontab

crontab -e 创建定时任务,第二步选择编辑器后进入

 创建命令的具体语法,略。

2.2、celery实现定时任务功能,(示例基本工作流程)

步骤1:

celery安装
pip install celery (python安装celery库)

ubuntu上安装celery

$sudo apt install celery

步骤2:

新建py文件

步骤3:

启动Celery Worker来开始监听并执行任务
celery -A celery_test worker -l debug   (-l debug 表示日志等级)

 步骤4:手动调用任务,再打开一个终端, 进行命令行模式

 远程执行情况

 步骤5:拿执行结果

检查任务是否完成
t1.ready() #返回True表示已完成

二、celery在项目中使用

1、基本场景流程

示例2、项目名s3Celery,(使用linux环境)结构如下

》创建celery.py

#第一行表示从绝对路径引用,表示第二行是从python的库中导入而不是自建的py文件

 》创建任务

 》启动worker

 》打开终端,调用任务

!Celery 任务执行有时成功有时失败(提示NotRegistered)
因为开发中使用的redis服务是共享的,且有多个部署了Celery的服务使用此Redis,但存储时未做db切割,因此任务在生成时会出现被别的服务领走情况,因此造成任务执行的失败。解决办法:​做redis的数据库分割,避免冲突

!后台启动worker
使用celery multi命令后台启动一个或多个worker,需要用管理权限
启动

$ celery multi start w1 -A s3Celery -l info

停止

$ celery multi stop w1 -A s3Celery -l info

2、celery定时任务

celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat

创建定时任务py文件periodic_task.py

 将定时任务添加到celery的include

 启动worker,等待执行任务

$ celery -A s3Celery worker -l info

启动任务调度器 celery beat

任务添加好了,需要让celery单独启动一个进程来定时发起这些任务, 注意, 这里是发起任务,不是执行,这个进程只会不断的去检查你的任务计划, 每发现有任务需要执行了,就发起一个任务调用消息,交给celery worker去执行

$ celery -A s3Celery.periodic_task beat

 检查worker的执行情况

!!也可以像写配置文件 一样的形式添加定时任务, 下面是每15秒执行的任务

 执行结果

 

*启动beat调度器显示错误,也能正常发起任务

*报错问题,把目录中的celerybeat-schedule文件删除,重新启动beat调度器,不报错

*更复杂的定时配置,用crontab功能,跟linux自带的crontab功能是一样的,可以个性化定制任务执行时间

'schedule': crontab(hour=7, minute=30, day_of_week=1),

三、celery在Django中实现定时任务

安装django对应包

$ pip3 install django-celery-beat

》添加到installed_apps

》更新数据表
python manage.py migrate

》启动Django服务,admin页有3张表

 

》新增记录创建定时任务,然后启动beat和worker,beat是从数据库读记录,命令如下

$ celery -A Djangopro beat -l info -S django 

从worker可看到定时任务执行

标签:python,worker,笔记,celery,beat,任务,定时,执行
From: https://www.cnblogs.com/steven223-z/p/17690046.html

相关文章

  • Python第四章序列(2):元组
    1.创建元组:  a=('a',2009) //与列表不同,用圆括号  a=()  a=(20,) //当元组中只包含一个元素的时候,需要在元素后加逗号,不然括号会被当成运算符2.元组访问:  a[1]   a[2:5] //也可以用切片  也可以用for的遍历。3.修改元组:  元组不允许......
  • Node.js+Express+Koa2开发接口学习笔记(一)
    http请求概述浏览器输入一个地址后,进行DNS解析(通过域名查找对应的IP地址),与server建立TCP连接(进行三次握手),发送http请求server接收到http请求,处理,并返回客户端(这里指浏览器)接收到返回数据,处理数据(如渲染页面,执行js)客户端与服务器的三次握手大致可以理解为:第一次握手:客......
  • Python第四章序列(1):列表
    1.列表的创建:  a=['hallo','guten',[2002,2223]]  empty_list=[]2.获得列表长度:  len(a)3.创建数值列表:  a=list(range(1,6))  //1到6的列表  b=list(range(1,11,2))  //1到10的奇数列表  c=list(random.sample((0,50),20)) //0到50的......
  • openGauss学习笔记-64 openGauss 数据库管理-创建和管理表空间
    openGauss学习笔记-64openGauss数据库管理-创建和管理表空间64.1背景信息通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。这样有以下优点:如果初始化数据库所在的分区或者卷空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空......
  • Go学习笔记4
    十三、对象9.挎包创建结构体实例【1】创建不同的包:【2】student.go:【3】main.go:发现:如果结构体首字母大写的话,在其它包下可以访问但是:如果结构体的首字母小写?解决:结构体首字母小写,跨包访问没问题:---》工厂模式10.封装【1】什么是封装:封装(encapsulation)就是把......
  • python-day4
    1.两数之和(input高级应用)num1=int(input('num1='))num2=int(input('num2='))print(num1+num2)或者num1=input('num1=')num2=input('num2=')print(type(num1))print(type(num2))print(int(num1)+int(num2))2.运算符算术运算符num1=int(input(�......
  • 信息安全系统设计与实现(上) 学习笔记1(教材1,2章)
    学习笔记1 知识点总结 第一章《Unix/Linux系统编程》教材第一章中介绍了Unix和Linux系统的基本概念以及编程环境的设置,介绍了系统编程的重要性和目标,旨在强化学生的编程背景知识,特别关注动态数据结构、进程管理、并发编程、定时器、信号处理、文件系统、TC......
  • Splay学习笔记
    这已经是第三次学习Splay了图片内容转载自yyb的博客二叉搜索树本来是一颗二叉树,但是满足这样的条件:对于一个节点\(x\),满足它的左子树中所有节点的\(val\)都小于\(val_x\),右子树中的所有节点的\(val\)都大于\(val_x\)。那么很显然,我们最希望它(尽可能)是一颗满二......
  • 关于软件架构设计的小笔记
    设计良好的计算机软件应该是易于扩展,同时抗拒修改。这就是著名的开闭原则(OCP)。换句话说,一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展。其实这也是我们研究软件架构的根本目的。如果对原始需求的小小延伸就需要对原有的软件系统进行大幅修改,那么这个系统......
  • Python获取主目录的方法
    用os.path.expanduser模块获取主目录为了获得用户的主目录,我们可以使用Python中的os.path.expanduser。我们必须在os.path.expanduser()函数里面传递一个字符串字符~,它将返回当前登录用户的主目录路径。它使用内置的密码数据库或pwd模块来搜索主目录的路径,pwd模块提供用户......