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

发布时间 2023-09-09 19:39:27作者: 子不语332

一、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可看到定时任务执行