本文共 2638 字,大约阅读时间需要 8 分钟。
在 Python 的众多优秀库中,Celery 是一个强大的分布式任务队列框架。它能够帮助开发者轻松在后台异步执行任务,特别适用于需要在特定时间或间隔内运行的任务,如定时发送邮件、定期数据处理等。
在自动化测试平台中,Celery 也是一环必不可少的工具,常用于实现定时运行自动化测试任务。本文将向你展示如何创建一个简单的 Celery Demo,帮助理解如何在测试平台中使用 Celery 完成定时任务的调度。
celery_test。在 PyCharm 的终端窗口中运行以下命令安装 Celery 和 Redis:
pip install celery redis
在 PyCharm 的终端窗口中运行以下命令启动 Redis:
redis-server
在项目文件夹中创建 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 在同一目录下创建 main.py 文件,内容如下:
from tasks import addif __name__ == '__main__': result = add.delay(4, 6) # 异步调用任务 print('Task submitted!') # 等待任务完成并获取结果 print('Result:', result.get(timeout=10)) 在 PyCharm 中新开一个终端窗口,运行以下命令启动 Celery worker:
celery -A tasks worker -l info -P eventlet
在 PyCharm 中新开一个终端窗口,运行以下命令执行主程序:
python main.py
错误处理:在 Windows 上运行 Celery 时可能会出现错误。安装 eventlet 扩展可以解决部分问题:
pip install eventlet
配置命令:启动 worker 时请确保使用 -P eventlet 参数。
在 tasks.py 中添加定时任务:
@app.taskdef scheduled_task(): print("Scheduled task executed!") 创建 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, },} 在终端窗口中运行以下命令启动 Celery Beat:
celery -A celerybeat_schedule beat -l info
在 tasks.py 中添加以下任务:
@app.taskdef daily_task(): print("Daily task executed at 14:30!") 更新 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), },} 重新启动 Celery worker 和 Beat:
celery -A tasks worker -l info -P eventletcelery -A celerybeat_schedule beat -l info
crontab 表达式支持以下参数:
minute:分钟(0-59 或字符串模式)hour:小时(0-23 或字符串模式)day_of_week:周几(0-6 或字符串模式)day_of_month:月份的第几天(1-31 或字符串模式)month_of_year:一年的第几个月(1-12 或字符串模式)常用示例:
crontab(minute=0, hour=0, day_of_week=0)
crontab(hour=14, minute=30)
通过以上配置,你可以轻松实现定时任务调度。希望这篇文章能为你提供帮助!
转载地址:http://avafk.baihongyu.com/