博客
关于我
Python Celery:自动化测试平台定时任务必备的三方库
阅读量:803 次
发布时间: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工具自动生成模块文档的秘诀
    查看>>
    python 一个list去除另一个list中的值
    查看>>
    python 三大框架的 介绍。
    查看>>
    Python 下载的 11 种姿势,一种比一种高级!
    查看>>
    python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
    查看>>
    Python 中 3 个不可思议的返回功能
    查看>>
    python 中 dict 的另一种用法
    查看>>
    Python 中 PIL 读取图片出现异常旋转的解决方法
    查看>>
    python读取word表格内容(1)
    查看>>
    python 中os.path.join 双斜杠的解决办法
    查看>>
    python 中PIL.Image和OpenCV图像格式相互转换
    查看>>
    Python 中Semaphore 信号量对象、Event事件、Condition
    查看>>
    python 中with的使用及样例
    查看>>
    python读取wav文件并播放[pyaudio/wave]
    查看>>
    python读取txt文件的行数
    查看>>
    Python 中内置的最大堆 API
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 中如何使用 lambda 函数
    查看>>