记录 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
五、日志追踪
在任务中使用 logging
可将日志写入文件或标准输出。通过 Celery 事件查看日志
启动时加上--loglevel=debug
查看详细执行过程。结果后端存储
任务执行结果会保存在 Redis(或其他后端),可结合日志做任务状态追踪。
六、小结
celery beat
负责调度,worker
负责执行- 定时任务适合周期性作业(数据同步、定期清理等)
- 日志追踪可帮助快速定位任务执行问题