Celery 是一个强大的分布式任务队列系统,它支持异步任务和定时任务。以下是关于 Celery 定时任务的一些基本使用和配置方法:
1. 定时任务基本使用
Celery 提供了 apply_async
方法来实现定时任务。你可以通过传递 eta
参数来指定任务执行的时间。eta
参数接受一个 datetime
对象,表示任务应该执行的时间。例如:
from celery import Celery
from datetime import datetime, timedelta
app = Celery('my_app', broker='pyamqp://guest@localhost//')
@app.task
def my_task():
print('Task executed')
# 设置定时任务,10秒后执行
eta = datetime.now() + timedelta(seconds=10)
result = my_task.apply_async(eta=eta)
2. 周期性定时任务
Celery 通过 beat_schedule
配置来实现周期性定时任务。你需要在 Celery 配置文件中定义一个调度计划,并启动 celery beat
进程来执行这些任务。以下是如何定义周期性任务的示例:
from celery import Celery
from celery.schedules import crontab
app = Celery('my_app', broker='pyamqp://guest@localhost//')
app.conf.beat_schedule = {
'run-every-30-seconds': {
'task': 'my_task',
'schedule': 30.0, # 每30秒执行一次
},
'run-every-minute': {
'task': 'my_task',
'schedule': crontab(minute='*/1'), # 每分钟执行一次
},
}
3. 启动 Celery Beat
要启动周期性定时任务,你需要运行 celery beat
命令。这个命令会根据 beat_schedule
配置来调度任务:
celery -A my_app beat --loglevel=info
4. 定时任务的注意事项
- 定时任务的时间是按照服务器的本地时间来计算的,如果服务器时间不准确,任务执行的时间也会受到影响。
- 使用
crontab
表达式时,可以定义更复杂的调度计划,如每天特定时间执行任务等。 - 确保你的 Celery 配置文件中包含了正确的
broker
和backend
设置,以便任务可以正确地发送和存储结果。
以上是 Celery 定时任务的基本使用方法和配置,你可以根据具体需求调整任务的执行时间和频率。更多详细信息和高级用法,可以参考 Celery 的官方文档。