博客
关于我
Python Celery:自动化测试平台定时任务必备的三方库
阅读量:796 次
发布时间:2023-03-05

本文共 2638 字,大约阅读时间需要 8 分钟。

使用 Celery 实现定时任务调度

一、背景

在 Python 的众多优秀库中,Celery 是一个强大的分布式任务队列框架。它能够帮助开发者轻松在后台异步执行任务,特别适用于需要在特定时间或间隔内运行的任务,如定时发送邮件、定期数据处理等。

在自动化测试平台中,Celery 也是一环必不可少的工具,常用于实现定时运行自动化测试任务。本文将向你展示如何创建一个简单的 Celery Demo,帮助理解如何在测试平台中使用 Celery 完成定时任务的调度。


二、环境准备

2.1 新建 PyCharm 项目

  • 打开 PyCharm,选择文件菜单,点击新建项目。
  • 项目名称填写 celery_test
  • 选择 Python 版本并点击下一步。

  • 2.2 安装依赖

    在 PyCharm 的终端窗口中运行以下命令安装 Celery 和 Redis:

    pip install celery redis

    2.3 启动 Redis

    在 PyCharm 的终端窗口中运行以下命令启动 Redis:

    redis-server

    三、创建 Celery 项目

    3.1 创建 tasks.py

    在项目文件夹中创建 tasks.py 文件,内容如下:

    from celery import Celeryimport timeapp = Celery('tasks',    broker='redis://localhost:6379/0',    backend='redis://localhost:6379/0')@app.taskdef add(x, y):    time.sleep(5)  # 模拟长时间运行的任务    return x + y

    3.2 创建 main.py

    在同一目录下创建 main.py 文件,内容如下:

    from tasks import addif __name__ == '__main__':    result = add.delay(4, 6)  # 异步调用任务    print('Task submitted!')        # 等待任务完成并获取结果    print('Result:', result.get(timeout=10))

    四、运行 Celery Worker

    在 PyCharm 中新开一个终端窗口,运行以下命令启动 Celery worker:

    celery -A tasks worker -l info -P eventlet

    五、运行主程序

    在 PyCharm 中新开一个终端窗口,运行以下命令执行主程序:

    python main.py

    注意事项

  • 错误处理:在 Windows 上运行 Celery 时可能会出现错误。安装 eventlet 扩展可以解决部分问题:

    pip install eventlet
  • 配置命令:启动 worker 时请确保使用 -P eventlet 参数。


  • 六、定时任务调度

    7.1 创建定时任务

    tasks.py 中添加定时任务:

    @app.taskdef scheduled_task():    print("Scheduled task executed!")

    7.2 创建调度配置

    创建 celerybeat_schedule.py 文件,内容如下:

    from tasks import appfrom celery.schedules import crontabapp.conf.beat_schedule = {    'execute-every-10-seconds': {        'task': 'tasks.scheduled_task',        'schedule': 10.0,    },}

    7.3 启动 Celery Beat

    在终端窗口中运行以下命令启动 Celery Beat:

    celery -A celerybeat_schedule beat -l info

    八、每天指定时间任务

    8.1 定义每天指定时间的任务

    tasks.py 中添加以下任务:

    @app.taskdef daily_task():    print("Daily task executed at 14:30!")

    8.2 修改调度配置

    更新 celerybeat_schedule.py 文件:

    from tasks import appfrom celery.schedules import crontabapp.conf.timezone = 'Asia/Shanghai'  # 设置时区app.conf.enable_utc = False  # 禁用 UTC 时区app.conf.beat_schedule = {    'execute-every-10-seconds': {        'task': 'tasks.scheduled_task',        'schedule': 10.0,    },    'execute-daily-at-14-30pm': {        'task': 'tasks.daily_task',        'schedule': crontab(hour=14, minute=30),    },}

    8.3 启动服务

    重新启动 Celery worker 和 Beat:

    celery -A tasks worker -l info -P eventletcelery -A celerybeat_schedule beat -l info

    九、crontab 表达式说明

    • crontab 表达式支持以下参数:

      • minute:分钟(0-59 或字符串模式)
      • hour:小时(0-23 或字符串模式)
      • day_of_week:周几(0-6 或字符串模式)
      • day_of_month:月份的第几天(1-31 或字符串模式)
      • month_of_year:一年的第几个月(1-12 或字符串模式)
    • 常用示例

      • 每 10 秒执行一次:
        crontab(minute=0, hour=0, day_of_week=0)
      • 每天 14:30 执行一次:
        crontab(hour=14, minute=30)

    通过以上配置,你可以轻松实现定时任务调度。希望这篇文章能为你提供帮助!

    转载地址:http://avafk.baihongyu.com/

    你可能感兴趣的文章
    Python - 正则表达式在括号之间获取数字
    查看>>
    Python - 类 __hash__ 方法和集合
    查看>>
    Python - 轻松将文本文件内容转换为字典值/键
    查看>>
    Python - 递归和列表
    查看>>
    python -- 小数据池 is和 == 再谈编码
    查看>>
    Python -- 算法实现
    查看>>
    python --- 元组(tuple)
    查看>>
    python --- 列表(list)
    查看>>
    python --- 协程
    查看>>
    python --- 字符串 str
    查看>>
    python ----元组方法以及修改细节
    查看>>
    python ----字典dict
    查看>>
    python / 解决 pyinstaller 打包后运行时提示找不到模块的问题
    查看>>
    Python 10 个习惯用法,短平快第一期
    查看>>
    python 29day--异常处理及socket简介
    查看>>
    Python 3 中未定义名称“xrange“
    查看>>
    python进阶(5):魔术方法篇(1)
    查看>>
    Python 3 范围与 Python 2 范围
    查看>>
    Python 3 读取ini文件
    查看>>
    Python 3.0 使用 turtle.onclick
    查看>>