欢迎访问宙启技术站
智能推送

Celery调度(schedule):如何设置定时任务

发布时间:2023-12-28 02:37:28

Celery是一个常用的分布式任务队列,在开发中常用于执行异步任务和定时任务。Celery提供了一个灵活而强大的调度器,可以轻松地设置定时任务并定期执行。

一、Celery调度器的安装和配置

1. 首先,你需要安装Celery。你可以通过pip安装它:

pip install celery

2. 创建一个Celery实例,你可以在你的项目中的任何地方定义它:

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0')

这里我们创建了一个名为"tasks"的Celery实例,并指定了Redis作为消息代理。

3. 定义一个定时任务

from datetime import timedelta
from celery.schedules import crontab

app.conf.beat_schedule = {
    'task-name': {
        'task': 'tasks.task_name',
        'schedule': crontab(minute=0, hour=0),  # 每天0点执行
    },
}

这里我们使用了Celery的内置调度器,定义了一个"task-name"的定时任务,它将在每天的0点执行。你可以根据自己的需要设置定时周期,比如每小时执行一次、每分钟执行一次等。

4. 启动Celery调度器

在项目的根目录中运行以下命令启动Celery调度器:

celery -A your_project_name beat

这里需要将"your_project_name"替换为你的项目名称。

二、设置定时任务的使用例子

以下是一个简单的使用例子,假设我们有一个任务,需要每天在特定的时间执行。

1. 在你的任务文件中定义一个任务:

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def send_email():
    print('发送邮件')

这个任务的功能是发送邮件,当定时任务触发时会执行。

2. 在项目的根目录中创建一个启动文件:

from celery import Celery
from datetime import timedelta
from celery.schedules import crontab

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def send_email():
    print('发送邮件')

app.conf.beat_schedule = {
    'send-email-task': {
        'task': 'tasks.send_email',
        'schedule': crontab(minute=0, hour=9),  # 每天9点执行
    },
}

这里我们将定时任务的定义和任务定义放在了同一个文件中,为了方便演示。实际开发中,你可能需要将它们分开放在不同的文件中。

3. 启动Celery调度器

在项目的根目录中运行以下命令启动Celery调度器:

celery -A main beat

这里的"main"是启动文件的名称,你可以根据实际情况进行修改。

4. 启动Celery Worker

在项目的根目录中运行以下命令启动Celery Worker:

celery -A main worker --loglevel=info

5. 执行定时任务

当定时任务触发时,你将会看到"Celery Worker"的控制台输出"发送邮件"的日志信息。

总结:

通过以上步骤,你就可以利用Celery设置定时任务并定期执行了。Celery的调度器非常灵活,可以根据你的需要设置不同的定时周期。它还支持其他调度器,比如固定间隔调度器(interval schedule)等,可以满足更多的需求。使用Celery的定时任务功能,可以帮助我们轻松地执行一些周期性的任务,提高开发效率。