Windows系统下【Celery任务队列】python使用celery 详解(一)

在这里插入图片描述

Celery 是一个基于 Python 的分布式任务队列框架,它允许你在不同的进程甚至不同的服务器上异步执行任务。

在这里插入图片描述
特点

  • 简单:易于使用和配置,提供了简洁的 API。
  • 高可用:支持任务的可靠交付,即使在出现故障时也能保证任务不丢失。
  • 分布式:可以在多个节点上分布式执行任务,提高系统的处理能力和可扩展性。
  • 多语言支持:虽然主要用 Python 编写,但也支持其他语言与它进行交互。

架构

  • 任务队列:存储等待处理的任务,通常使用消息中间件(如 RabbitMQRedis 等)来实现。
  • 工作者(Worker):负责从任务队列中获取任务并执行。
  • 应用(App):定义任务和配置 Celery 的相关设置。

1.安装配置

安装 Celerypip install celery
配置消息中间件:如果使用 Redis 作为消息中间件,则需要在Celery 配置中指定 Redis 作为后端和消息代理。
定义任务:在 Python 代码中定义需要异步执行的任务函数,使用@app.task装饰器将函数标记为 Celery 任务。
新建 celery_tasks.py 文件, 定义了两个任务


import time
from celery import Celery# 创建Celery应用
app = Celery('celery_app',broker='redis://localhost:6379/0',backend='redis://localhost:6379/0',broker_transport_options={'global_keyprefix': 'celery_tasks:'},result_backend_transport_options={'global_keyprefix': 'celery_tasks:'})# 定义发送消息任务
@app.task
def send_msg(message):print(f"开始发送消息: {message}")time.sleep(3)print(f"发送消息完成: {message}")return message# 定义发送邮箱任务
@app.task
def send_email(email):print(f"开始发送邮箱: {email}")time.sleep(3)print(f"发送邮箱完成: {email}")return email
  • 'celery_app':这是应用的名称
  • broker:指的是消息代理,其作用是在任务生产者(调用任务的代码)和任务消费者(Celery 工作进程)之间传递任务消息。
  • backend:是结果后端,用来存储任务的执行结果。当任务执行完成后,结果会被存储到结果后端中,之后可以通过任务的 ID 来获取这些结果

2.启动工作者

启动工作者:在命令行中启动 Celery 工作者,监听任务队列并执行任务。

celery -A celery_tasks worker --loglevel=info -P eventlet
  • -A celery_tasks : -A 参数指定了包含 Celery 应用实例的模块名。
    Celery 会去加载 celery_tasks.py 文件中的 app 实例,并启动一个工作进程来监听消息队列。当有新的 send_email 任务或者send_email任务被发送到消息队列时,工作进程就会执行该任务。
  • worker: 表示你想要启动一个 worker 进程来执行任务队列中的任务。
  • --loglevel=info: 设置日志级别为 info
  • -P eventlet: 指定使用 eventlet 作为并发池的实现。默认情况下,Celery 使用的是 prefork(多进程)模型,但在某些环境下,比如 Windows 上,或者当你需要更高效的 I/O 操作时,可以使用 eventlet 或 gevent 这样的协程库来代替。Eventlet 提供了基于 green thread 的并发模型,对于 I/O 密集型的任务来说可能更加高效,并且解决了在 Windows 上由于缺少 fork 支持而可能出现的问题。安装:pip install eventlet

在这里插入图片描述

启动之后redis数据库会生成这几个
在这里插入图片描述

3.调用任务

调用任务:在其他地方的代码中,可以通过调用任务函数的delayapply_async方法来将任务发送到消息队列中。

from celery_tasks import send_msg, send_emailresult_msg = send_msg.delay('Hello, World!')
result_email = send_email.delay('123456@qq.com')print(f"Message task ID: {result_msg.id}")
print(f"Email task ID: {result_email.id}")

在这里插入图片描述

Message task ID: ab6ecfcc-ee26-4265-8097-5087786e4659
Email task ID: 1cf3f8f8-4e1a-4d8c-88a5-f2a32356f763

运行完成,获取到了ID
在这里插入图片描述

可以看到Celery worker 是能够并行处理这两个任务的
在这里插入图片描述

在这里插入图片描述

于此同时,redis数据库多了两个,我们就可以根据ID取获取数据

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

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

相关文章

移动设备常用电子屏幕类型对比

概述 LCD 家族 (TN、STN、TFT、IPS、VA)依赖背光,性能差异主要来自液晶排列和驱动方式。OLED 以自发光为核心优势,但成本与寿命限制其普及。E-Paper 专为低功耗静态显示设计,与传统屏幕技术差异显著。 参数LCD&#…

Vue3.5 企业级管理系统实战(十八):用户管理

本篇主要探讨用户管理功能,接口部分依然是使用 Apifox mock 模拟。 1 用户 api 在 src/api/user.ts 中添加用户相关 CRUD 接口,代码如下: //src/api/user.ts import request from "/api/config/request"; // 从 "./type&q…

【C】初阶数据结构14 -- 归并排序

本篇文章主要是讲解经典的排序算法 -- 归并排序 目录 1 递归版本的归并排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 2 迭代版本的归并…

【相机标定】OpenCV 相机标定中的重投影误差与角点三维坐标计算详解

摘要: 本文将从以下几个方面展开,结合典型代码深入解析 OpenCV 中的相机标定过程,重点阐述重投影误差的计算方法与实际意义,并通过一个 calcBoardCornerPositions() 函数详细讲解棋盘格角点三维坐标的构建逻辑。 在计算机视觉领域…

RabbitMQ-运维

文章目录 前言运维-集群介绍多机多节点单机多节点 多机多节点下载配置hosts⽂件配置Erlang Cookie启动节点构建集群查看集群状态 单机多节点安装启动两个节点再启动两个节点验证RabbitMQ启动成功搭建集群把rabbit2, rabbit3添加到集群 宕机演示仲裁队列介绍raft算法协议 raft基…

JVM之内存管理(一)

部分内容来源:JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧:局部变量表,动态链接(符号引用转为真实引用),操作数栈(存储中间结算结果),方法返回地址 运行时…

无线射频模块如何通过CE RED认证?关键规范与准备策略详解

随着无线通信设备在欧洲市场的广泛应用,CE RED认证已成为模块类产品进入欧盟的强制通行证。作为专注于LoRa模块、对讲模块与FSK射频模块研发的技术企业,我们深知从设计、测试到量产,每一个环节都需紧扣合规底线。本文将围绕CE RED认证核心要求…

Golang中集合相关的库

一切编程语言的底层结构都是数组,其它复杂数据结构如Map, Stack,Heap和Queue都是基于数组建立起来的。 Go语言主流工具库推荐(含常用数据结构实现) 以下是目前Go生态中最主流且活跃的工具库,包含队列、栈、优先级队列…

ABAP 导入Excel形成内表

文章目录 创建导入模板程序实现代码代码解析运行结果 创建导入模板 程序实现 代码 *&---------------------------------------------------------------------* *& Report Z_EXCEL_UPLOAD_LHY *&--------------------------------------------------------------…

特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值

生物学意义 解析非加性遗传效应 特殊配合力(SCA)主要反映特定亲本组合的杂交优势,由非加性遗传效应(如显性、超显性、上位性)驱动。显性效应涉及等位基因间的显性互作,上位性效应则涉及不同位点间的基因互作。通过SCA-GWAS,可以定位调控这些非加性效应的关键基因组区域…

应急响应基础模拟靶机-security1

PS:杰克创建在流量包(result.pcap)在根目录下,请根据已有信息进行分析 1、攻击者使用的端口扫描工具是? 2、通过流量及日志审计,攻击者上传shell的时访问web使用IP地址是多少? 3、审计流量日志,攻击者反弹shell的地址及端口? 4、攻击者…

uniapp-商城-47-后台 分类数据的生成(通过数据)

在第46章节中,我们为后台数据创建了分类的数据表结构schema,使得可以通过后台添加数据并保存,同时使用云函数进行数据库数据的读取。文章详细介绍了如何通过前端代码实现分类管理功能,包括获取数据、添加、更新和删除分类。主要代…

ClickHouse的基本操作说明

说明 文章内容包括数据库管理、表操作及查询等核心功能 创建数据库 -- 默认引擎(Atomic) CREATE DATABASE IF NOT EXISTS test_db; -- MySQL引擎(映射外部MySQL数据库) CREATE DATABASE mysql_db ENGINE MySQL(host:port, m…

Nacos源码—7.Nacos升级gRPC分析四

大纲 5.服务变动时如何通知订阅的客户端 6.微服务实例信息如何同步集群节点 6.微服务实例信息如何同步集群节点 (1)服务端处理服务注册时会发布一个ClientChangedEvent事件 (2)ClientChangedEvent事件的处理源码 (3)集群节点处理数据同步请求的源码 (1)服务端处理服务注册…

《Overlapping Experiment Infrastructure: More, Better, Faster》论文阅读笔记

文章目录 1 背景2 三个核心概念3 Launch层:特性发布的专用机制4 流量分发策略和条件筛选4.1 四种流量分发类型4.2 条件筛选机制 5 工具链与监控体系6 实验设计原则7 培训参考与推荐 1 背景 谷歌(Google)以数据驱动著称,几乎所有可…

国芯思辰| 医疗AED可使用2通道24位模拟前端SC2946(ADS1292)

生物电信号监测技术在医疗健康行业中发展迅速,成为评估人体生理健康状况的关键手段。心电(ECG)、脑电(EEG)和肌电(EMG)等信号,通过精密模拟前端芯片捕捉和处理,对医疗诊断…

数据结构【二叉搜索树(BST)】

二叉搜索树 1. 二叉搜索树的概念2. 二叉搜索树的性能分析3.二叉搜索树的插入4. 二叉搜索树的查找5. 二叉搜索树的删除6.二叉搜索树的实现代码7. 二叉搜索树key和key/value使用场景7.1 key搜索场景:7.2 key/value搜索场景: 1. 二叉搜索树的概念 二叉搜索…

RDMA高性能网络通信实践

RDMA高性能网络通信实践 一、背景介绍二、方法设计A.实现方案B.关键技术点 三、代码及注释四、注意事项 一、背景介绍 远程直接内存访问(RDMA)技术通过绕过操作系统内核和CPU直接访问远程内存,实现了超低延迟、高吞吐量的网络通信。该技术广…

ndarray数组掩码操作,True和False获取数据

#数组掩码的表示方法 def testht05():a np.arange(1,10)mask [True,False,True,True,False,True,False,True,True]print(a[mask]) 另外的用法: #掩码操作获取子集 def testht06():a np.arange(1,100)print(a[a%3 0 & (a%7 0)] )b np.array([A,"B&qu…

索引工具explain

EXPLAIN 是 MySQL 中一个非常有用的工具,用于分析查询的执行计划。通过 EXPLAIN,你可以了解 MySQL 是如何执行查询的,包括它如何使用索引、表的扫描方式等。这有助于优化查询性能。以下是 EXPLAIN 输出的各个字段的详细解释: 基本用法 EXPLAIN SELECT * FROM table_name …