首页 > 其他分享 >celery简单使用

celery简单使用

时间:2024-10-19 14:43:05浏览次数:4  
标签:Celery task 队列 简单 celery 任务 tasks 使用

目录

celery是什么

  • celery是一个简单,灵活且可靠的,处理大量消息的分布式系统
  • 专注于实时处理的异步任务队列
  • 同时也支持任务调度

celery队列

使用场景

  • 异步任务:将耗时操作任务提交给celery去异步执行,比如发送短信/邮件,消息推送,音视频处理
  • 定时任务:类似于crontab,比如每日数据统计

安装

python环境配置参考

pip install celery
docker run --name redis --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -d -p 6379:6379 registry.cn-hangzhou.aliyuncs.com/k8s-a/redis:6.2

celery命令

定义消费者(worker)

tasks.py,定义消费者可以执行的任务

from celery  import Celery
import time

# borker是消息队列,用于生产者与消费者通信,生产者将任务发布到broker,消费者从broker获取任务
broker='redis://127.0.0.1:6379/0'
# backend是结果后端,用于存储任务执行结果
backend='redis://127.0.0.1:6379/1'
# 创建一个名为task的Celery实例,通过此实例,注册,发布,管理任务
app = Celery('task', broker=broker,backend=backend)

#@app.task() 将普通函数注册为Celery任务,此函数可被Celery调度分配异步执行
@app.task()
def add(x,y):
    return x + y

#通过sleep函数,模拟耗时任务
@app.task()
def add2(x,y):
    time.sleep(5)
    return x + y

启动消费者

启动Celery实例

#tasks是指向tasks.py文件,worker是Celery工作进程,-l INFO是日志级别 
celery -A tasks worker -l INFO 

查看消费者启动日志

celery worker 启动打印日志如下

[config]
# task是Celery('task', broker=broker,backend=backend)的Celery实例名称
.> app:         task:0x7f3c0d4c7810
# transport为任务队列
.> transport:   redis://127.0.0.1:6379/0
# results 为结果后端
.> results:     redis://127.0.0.1:6379/1
# concurrency 并发数量
.> concurrency: 2 (prefork)
# task events: OFF 表示关闭任务监控功能,-E参数可打开此功能
.> task events: OFF (enable -E to monitor tasks in this worker)

# 队列配置信息
[queues]
# celery 是队列的名称,默认是celery,用于发送和接收任务
# exchange是消息交换机,direct表示消息会直接路由到匹配的队列
# key=celery 表示路由键,默认情况下,所有的任务都会使用这个路由键并被发送到 celery 队列
.> celery           exchange=celery(direct) key=celery

#任务列表,表示worker已启动识别下面的任务
#当生产者向celery发送任务时,worker会从队列中取出任务并执行
[tasks]
. tasks.add
. tasks.add2

定义生产者(producer)

生产者是发布任务的部分,即将任务发送到消息队列(broker)
app.py示例

from tasks import add,add2

#异步调用add(2,3)任务,并将任务推送到消息队列
#返回AsyncResult对象,表示状态和结果
t = add.delay(2,3)
print(t)
#获取任务结果,会阻塞当前进程,直接到任务结束返回结果
#如果任务失败抛出异常,celery.exceptions.TaskRevokedError
t.get()

#获取任务执行结果,不会阻塞
#任务未执行完,返回None
t.result

#检查任务是否执行完成
#True: 表示任务完成,无论成功,失败,还是取消
#False: 任务还在执行中
t.ready()

#返回任务的当前状态
#PENDING: 任务还未开始执行
#STARTED: 任务已开始执行
#RETRY: 任务正在重试
#FAILURE: 任务执行失败
#SUCCESS: 任务执行成功
t.status

#返回任务id
t.id

#异步调用add2(4,5)任务,并将任务推送到消息队列
t = add2.delay(4,5)
print(t)

输出内容如下

In [4]: add2.delay(4,4)
# 61bdb7ec-6d98-4c91-abeb-cd3f84158627是任务的唯一id,通过id查询任务状态和结果
Out[4]: <AsyncResult: 61bdb7ec-6d98-4c91-abeb-cd3f84158627>

In [5]: t=add2.delay(4,4)

In [6]: t
Out[6]: <AsyncResult: 5c9f5b5b-70a9-4e71-82ad-84f449a334ba>

标签:Celery,task,队列,简单,celery,任务,tasks,使用
From: https://www.cnblogs.com/anyux/p/18475876

相关文章

  • harbor 搭建及使用
    docker-compose下载curl-Lhttps://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64>/usr/local/bin/docker-compose增加权限sudochmod+x/usr/local/bin/docker-compose查询docker-compose版本docker-compose-vHarbor下载wg......
  • Edge浏览器美化及使用教程
    Edge浏览器美化及使用教程右上角设置关闭不需要的界面,建议保留背景和两行快速链接.这样可以屏蔽广告信息,保持清爽.点击浏览器右上角三点,选择设置,找到外观.可以对浏览器按钮进行自定义,推荐打开开始,始终显示前进和拓展,下载.其他根据自己常用设置进行选择,单不推荐设置......
  • 使用MySQL之数据过滤
    1.组合WHERE子句为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。补充:操作符(operator):用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符(logicaloperator)。1.1AND操作符为了通过不止一个列进......
  • GreatSQL 在 SQL 中使用 HINT 语法修改会话变量的实践
    全文目录:开篇语......
  • 使用Flyway进行数据库版本控制
    1.flyway介绍Flyway是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理和自动化数据库结构的变更。它可以跟踪和管理数据库的版本控制,并在应用程序启动时自动执行升级或回滚操作。在项目或产品中,很难一开始就把业务理清楚、......
  • File类的使用
    一、File的定义和构造方法File是一个类,在java.io.File包下,需要进行导包importjava.io.File;/*File【文件】:是计算机中所有文件的抽象表示,将来File对象目标可能存在,也可能不存在。构造方法:publicFile(Stringpathname)publicFile(Stringp......
  • MATLAB 工具箱详细重点知识点概述 MATLAB 工具箱使用案例
    一、章节目录MATLAB工具箱概述常见MATLAB工具箱介绍MATLAB工具箱使用案例展示学习MATLAB工具箱的方法MATLAB工具箱的发展趋势二、各章节知识点总结MATLAB工具箱概述MATLAB是一种广泛应用于科学计算、数据分析、算法开发等领域的高级编程语言和交互式环境。MA......
  • 【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)
    零.前置篇章本篇前置文章为【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植一.UI设计        介绍使用之前,我们要学习一款LVGL官方的UI设计工具SquareLineStudio,使用图形化设计方式设计出我们想要的界面,然后生成对应源文件导入工程使用。详情参考这篇文章:【......
  • AI绘画:2024最全面的ComfyUI插件与Lora的下载及使用!
    前言本节我们介绍ComfyUI插件和Lora的下载及使用方式。1.安装1.1Checkpoint安装将从前面介绍的模型下载平台下载后,放在ComfyUI/models/checkpoints文件夹下。1.2Lora安装在前面介绍的模型下载网站下载Lora模型,然后放在ComfyUI/models/loras文件夹下。所有的AI设......
  • Linux下丝滑使用docker
    安装docker安装由debian维护的docker.io,参考https://www.kali.org/docs/containers/installing-docker-on-kali/sudoaptupdatesudoaptinstalldocker.iosudosystemctlenabledocker--now为普通用户添加docker的权限sudousermod-aGdocker$USER更改docker镜像(......