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 配置文件中包含了正确的 brokerbackend 设置,以便任务可以正确地发送和存储结果。

以上是 Celery 定时任务的基本使用方法和配置,你可以根据具体需求调整任务的执行时间和频率。更多详细信息和高级用法,可以参考 Celery 的官方文档。