python 实现 Celery 任务队列系统

这是一个基于 Celery 和 Redis 的分布式任务队列系统,用于处理异步任务和定时任务。

系统要求

  • Python 3.x
  • Redis 服务器
  • 依赖包:
    • celery==5.3.6
    • redis==5.0.1

系统架构

系统主要由以下组件构成:

  1. 任务定义模块 (tasks.py):包含所有可执行的任务定义
  2. 主程序模块 (main.py):负责任务的调度和监控
  3. Redis 服务器:作为消息代理(Broker)和结果后端(Result Backend)

配置说明

Celery 配置

broker_url = 'redis://:[email protected]:6379/1'
result_backend = 'redis://:[email protected]:6379/1'

主要配置项:

  • 任务序列化:JSON
  • 时区:Asia/Shanghai
  • 工作进程数:1

功能模块

1. 基础运算任务

  • add(x, y): 加法运算
  • multiply(x, y): 乘法运算
  • chain_calculation(numbers): 链式计算(求和、平均值、最大值、最小值)

2. 文本处理任务

  • process_text(text): 文本处理(大写转换、长度统计、单词计数)

3. 系统监控任务

  • system_monitor(): 每5秒执行一次,监控系统状态
    • CPU使用率
    • 内存使用率
    • 系统状态

4. 报告生成任务

  • generate_report(): 生成实时报告
  • daily_report(): 每天早上9点生成日报
  • workday_task(): 工作日每小时执行的任务

定时任务配置

系统包含以下定时任务:

  1. 系统监控:每5秒执行一次
  2. 日报生成:每天早上9点执行
  3. 工作日任务:工作日(周一至周五)9:00-18:00每小时执行

使用说明

1. 启动系统

  1. 确保Redis服务器已启动
  2. 启动Celery工作进程:
celery -A tasks worker --loglevel=info
  1. 启动Celery Beat进程(用于定时任务):
celery -A tasks beat
  1. 运行主程序:
python main.py

2. 系统监控

主程序运行后会自动执行以下操作:

  • 实时显示系统监控数据
  • 执行常规任务示例
  • 通过按下 Ctrl+C 可以优雅退出程序

错误处理

系统实现了完整的错误处理机制:

  • 任务执行错误捕获和日志记录
  • 优雅的程序退出处理
  • 自动重试机制

注意事项

  1. Redis连接配置需要根据实际环境修改
  2. 确保系统时区设置正确
  3. 建议在生产环境中调整工作进程数
  4. 监控数据目前为模拟数据,实际使用时需要替换为真实的系统监控指标

代码示例

任务执行示例:

# 执行加法任务
result = add.delay(4, 6)
print(f"任务ID: {
     result.id}")
if result.ready():
    print(f"结果: {
     result.get()}")

系统监控示例:

main.py

# 执行系统监控
result = system_monitor.delay()
data = result.get()
print(f"CPU使用率: {
     data['cpu_usage']:.1f}%")
print(f"内存使用率: {
     data['memory_usage']:.1f}%")
### 所有代码:

```python
from tasks import add, multiply, process_text, generate_report, chain_calculation, system_monitor
import time
import json
from datetime import datetime
import threading
import signal
import sys
from celery.result import AsyncResult

# 全局变量控制程序运行
running = True

def signal_handler(signum, frame):
    """处理退出信号"""
    global running
    print("\n收到退出信号,正在关闭程序...")
    running = False

def monitor_system_task():
    """监控系统任务的执行结果"""
    while running:
        try:
            # 执行系统监控任务
            result = system_monitor.delay()
            
            # 等待结果(最多等待4秒)
            for _ in range(4):
                if result.ready():
                    data = result.get()
                    if data:
                        print(f"\n系统监控结果:")
                        print(f"CPU使用率: {
     data['cpu_usage'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老大白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值