当前位置: 首页 > news >正文

使用 `Celery` 配合 `RabbitMQ` 作为消息代理,实现异步任务的调度、重试、定时任务以及错误监控等功能

python基础代码、优化、扩展和监控的完整示例。此示例使用 Celery 配合 RabbitMQ 作为消息代理,实现异步任务的调度、重试、定时任务以及错误监控等功能。


项目结构

我们将项目结构组织如下,以便代码逻辑清晰且易于扩展:

project/
│
├── celery_app.py        # Celery应用的配置和初始化
├── tasks.py             # 异步任务的定义
├── monitor.py           # 异常监控和报警
└── main.py              # 测试异步任务调用

1. celery_app.py - 配置 Celery 应用

# celery_app.py
from celery import Celery
from celery.schedules import crontabapp = Celery('tasks', broker='amqp://localhost//', backend='redis://localhost')# 基础配置
app.conf.update(result_expires=3600,                     # 任务结果过期时间task_acks_late=True,                     # 确保任务执行后才确认完成worker_prefetch_multiplier=1,            # 单次预取任务数task_serializer='json',                  # 任务数据序列化格式result_serializer='json',                # 任务结果序列化格式accept_content=['json'],                 # 仅接收json格式task_soft_time_limit=300,                # 软超时时间task_time_limit=600,                     # 硬超时时间worker_hijack_root_logger=False,         # 不劫持主日志worker_log_format='[%(asctime)s: %(levelname)s/%(processName)s] %(message)s',
)# 定时任务配置
app.conf.beat_schedule = {'scheduled_add': {'task': 'tasks.add','schedule': crontab(hour=7, minute=30, day_of_week=1),'args': (16, 16),},
}# 任务路由配置:不同的任务可以走不同的队列
app.conf.task_routes = {'tasks.add': {'queue': 'high_priority'},
}

2. tasks.py - 定义任务

# tasks.py
from celery_app import app
from monitor import task_failure_handler
import time# 定义基础任务
@app.task(bind=True, max_retries=3)
def add(self, x, y):try:time.sleep(5)  # 模拟耗时任务return x + yexcept Exception as exc:raise self.retry(exc=exc, countdown=5)  # 5秒后重试

3. monitor.py - 监控与报警

# monitor.py
from celery.signals import task_failure@task_failure.connect
def task_failure_handler(sender=None, exception=None, **kwargs):# 发送报警通知或记录错误日志print(f"[ALERT] Task {sender.name} failed due to {exception}")

4. main.py - 测试任务调用

# main.py
from tasks import add
from celery_app import appif __name__ == "__main__":# 启动异步任务result = add.delay(4, 6)print("Task state:", result.state)  # 打印任务状态print("Result:", result.get())      # 获取任务结果(阻塞等待)# 组合任务示例:Groupfrom celery import groupgroup_tasks = group(add.s(i, i) for i in range(10))group_result = group_tasks.apply_async()print("Group Result:", group_result.get())# 链式任务示例:Chordfrom celery import chordcallback = add.s(10, 20)chord_tasks = chord((add.s(i, i) for i in range(10)), callback)chord_result = chord_tasks.apply_async()print("Chord Result:", chord_result.get())

运行和监控

  1. 启动 RabbitMQ 服务

    sudo service rabbitmq-server start
    
  2. 启动 Celery Worker
    运行以下命令,指定 high_priority 队列处理高优先级任务。

    celery -A celery_app worker -Q high_priority,default -l info
    
  3. 启动 Celery Beat(用于调度定时任务):

    celery -A celery_app beat -l info
    
  4. 启动 Flower 实时监控(可选):

    celery -A celery_app flower --port=5555
    

    访问 http://localhost:5555 进行任务和 worker 状态的实时监控。

  5. Prometheus 和 Grafana 监控(可选)
    配置 Celery 的自定义事件,并使用 Prometheus 采集数据,再通过 Grafana 可视化 Celery 的性能指标。


此示例项目具有以下特性:

  • 异步任务:通过 delay() 方法调用。
  • 重试机制:在任务异常时自动重试。
  • 任务调度:支持定时任务,利用 Celery Beat 实现周期性任务调度。
  • 报警机制:在任务失败时发送报警或日志记录。
  • 监控系统:使用 Flower 进行实时监控,支持 Prometheus 和 Grafana 扩展。

相关文章:

使用 `Celery` 配合 `RabbitMQ` 作为消息代理,实现异步任务的调度、重试、定时任务以及错误监控等功能

python基础代码、优化、扩展和监控的完整示例。此示例使用 Celery 配合 RabbitMQ 作为消息代理,实现异步任务的调度、重试、定时任务以及错误监控等功能。 项目结构 我们将项目结构组织如下,以便代码逻辑清晰且易于扩展: project/ │ ├──…...

react-router与react-router-dom的区别

写法上的区别: 写法1: import {Swtich, Route, Router, HashHistory, Link} from react-router-dom;写法2: import {Switch, Route, Router} from react-router; import {HashHistory, Link} from react-router-dom;react-router实现了路由的核心功能 react-router-…...

【研究生必看】把选题和文献交给AI,轻松搞定毕业论文!

在学习和研究的过程中,选题和文献录入真的是让人头疼的事情。面对一堆资料,很多时候我们会感到无从下手,甚至有点焦虑。不过,大家别担心!现在有了像“梅子AI论文”这样的工具,可以帮助我们轻松搞定这些问题…...

Android中同步屏障(Sync Barrier)介绍

在 Android 中,“同步屏障”(Sync Barrier)是 MessageQueue 中的一种机制,允许系统临时忽略同步消息,以便优先处理异步消息。这在需要快速响应的任务(如触摸事件和动画更新)中尤为重要。 在 An…...

真·香!深度体验 zCloud 数据库云管平台 -- DBA日常管理篇

点击蓝字 关注我们 zCloud 作为一款业界领先的数据库云管平台,通过云化自治的部署能力、智能巡检和诊断能力、知识即代码的沉淀能力,为DBA的日常管理工作带来了革新式的简化与优化。经过一周的深度体验,今天笔者与您深入探讨 zCloud 在数据库…...

优雅的遍历JSONArray,获取里面的数据

最近看到有个同事在遍历json数组的时候,用for循环写了一层有一层,那么是否有简便的写法呢?当然有了,下面就有用流的行驶,优雅的遍历数组,获取我们想要的数据 public static void main(String[] args) {Str…...

C#:强大而优雅的编程语言

在当今的软件开发领域,C#作为一种广泛应用的编程语言,以其强大的功能、优雅的语法和丰富的生态系统,受到了众多开发者的喜爱。本文将深入探讨 C#的各个方面,展示它的魅力和优势。 一、C#的历史与发展 C#是由微软公司开发的一种面…...

一个由Deno和React驱动的静态网站生成器

大家好,今天给大家分享一个由 Deno React 驱动的静态网站生成器Pagic。 项目介绍 Pagic 是一个由 Deno React 驱动的静态网站生成器。它配置简单,支持将 md/tsx 文件渲染成静态页面,而且还有大量的官方或第三方主题和插件可供扩展。 核心…...

Python pyautogui库:自动化操作的强大工具

在Python的众多强大库中, pyautogui库脱颖而出,成为了实现自动化操作的得力助手。它允许你通过编程控制鼠标和键盘操作,无论是进行自动化测试、创建宏,还是进行一些重复性的任务,pyautogui都能发挥巨大的作用。 一、安…...

【HTML】——VSCode 基本使用入门和常见操作

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:HTML开发工具VSCode的使用 1:创建项目 2:创建格式模板&#x…...

从0开始搭建一个生产级SpringBoot2.0.X项目(八)SpringBoot 使用Redis

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot使用Redis 缓存数据 一、 pom引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>&…...

Ubuntu20.04两种安装及配置中文界面、输入法、换源、共享文件夹实现,及注意事项

虚拟机安装法 1、新建虚拟机&#xff0c;自定义下一步 任意指定路径 提高处理器数量能加快系统响应 完成以后不要运行&#xff0c;添加镜像文件 导入镜像文件&#xff0c;点击浏览 选择后打开->确认->运行虚拟机 出现这种情况就需要检查虚拟机的配置&#xff0c;操作系统…...

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储&#xff1f; 阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用OSS&#xff0c;您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…...

python通过lunarcalendar库使用农历日期

农历日期库 介绍 lunarcalendar是一个处理农历日期的库 可以简单通过pip安装&#xff1a;pip install lunarcalendar lunarcalendar的github地址 从公历转为农历 from lunarcalendar import Converter, Solarsolar Solar(2024, 11, 1) lunar Converter.Solar2Lunar(sola…...

MySQL高级--范式与反范式

MySQL高级–范式与反范式 1. 背景 首先让我们来简单了解什么是范式与反范式 如下有部门表&#xff08;包含&#xff1a;雇员、部门、部门领导&#xff09; EMPLOYEEDEPARTMENTHEADJonesAccountingJonesSmithEngineeringSmithBrownAccountingJonesGreenEngineeringSmith 我们…...

实验05多重循环---7-02 打印矩形图案

打印一个 m 行 n 列的字符 * 组成的矩形图案。 输入格式: 输入在一行中给出空格隔开的两个整数&#xff0c;分别表示行数 m 和列数 n&#xff0c;其中 m 和 n 分别满足 1≤m≤10&#xff0c;1≤n≤20。 输出格式: 由字符 * 组成的 m 行 n 列的矩形图案。 输入样例: 3 5 输出…...

明源地产ERP WFWebService.asmx 反序列化RCE漏洞复现

0x01 产品简介 明源地产ERP是一款专为房地产行业设计的企业资源规划(ERP)系统,系统集成了项目管理、财务管理、客户关系管理、营销管理等多个模块,旨在帮助房地产企业提升运营效率、降低成本和提高客户满意度。它充分考虑了房地产行业的特性和需求,通过整合企业的各个业务…...

学习笔记:黑马程序员JavaWeb开发教程(2024.11.4)

5.8 请求响应-请求-案例 数据保存在emp.xml文件中&#xff0c;解析XML的工具类XMLParserUtils&#xff0c;其中使用了dom4j的接口&#xff0c;因此要在pom.xml文件中引入dom4j的依赖&#xff0c;用于解析XML文件&#xff0c;实体类Emp用于封装服务器解析的数据 前端页面文件…...

开源自托管数据管理工具全面指南

在大数据时代&#xff0c;企业和组织面临着海量的数据挑战。随着应用程序复杂性的提高以及用户需求不断演变&#xff0c;开发团队需要高效地处理大量数据&#xff0c;以便快速做出决策。然而&#xff0c;在众多信息中&#xff0c;如何识别并有效利用那些对决策至关重要的数据呢…...

护工系统|护工陪护软件|护工系统设计

在现代社会&#xff0c;护工系统的开发成为提升医疗服务质量和效率的重要手段。页面设计作为系统开发的关键环节&#xff0c;必须充分考虑到实用性与用户体验。以下是对护工系统开发页面设计功能的详细阐述&#xff1a; 一、用户登录与权限管理 页面设计首先应设置用户登录模块…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...