博客
关于我
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语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>