记录 Celery 中定时任务(周期任务)的配置方式,以及在任务执行过程中进行日志追踪的常用方法。


一、依赖安装

pip install celery redis

示例中使用 Redis 作为 broker 与 backend。


二、基础配置

创建 celery_app.py

from celery import Celery

celery_app = Celery(
    'myapp',
    broker='redis://localhost:6379/0',
    backend='redis://localhost:6379/1'
)

celery_app.conf.timezone = 'Asia/Shanghai'
celery_app.conf.enable_utc = False

三、定义任务

import logging
from celery_app import celery_app

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)

@celery_app.task
def sample_task(name):
    logger.info(f"任务开始: {name}")
    return f"Hello, {name}"

四、添加定时任务(celery beat)

celery_app.py 中添加 beat_schedule 配置:

from datetime import timedelta

celery_app.conf.beat_schedule = {
    'say-hello-every-30s': {
        'task': 'sample_task',
        'schedule': timedelta(seconds=30),
        'args': ('Celery User',)
    }
}

运行:

celery -A celery_app beat --loglevel=info
celery -A celery_app worker --loglevel=info

五、日志追踪

  1. 在任务中使用 logging
    可将日志写入文件或标准输出。

  2. 通过 Celery 事件查看日志
    启动时加上 --loglevel=debug 查看详细执行过程。

  3. 结果后端存储
    任务执行结果会保存在 Redis(或其他后端),可结合日志做任务状态追踪。


六、小结

  • celery beat 负责调度,worker 负责执行
  • 定时任务适合周期性作业(数据同步、定期清理等)
  • 日志追踪可帮助快速定位任务执行问题