Django 如何使用 celery-beat 启动任务

Django 如何使用 celery-beat 启动任务

在本文中,我们将介绍如何使用 Django 和 celery-beat 来启动异步任务。

阅读更多:Django 教程

什么是 Django 和 Celery-Beat?

Django 是一个采用 Python 编写的开源 Web 开发框架,它提供了丰富的功能和工具,使得开发 Web 应用变得简单和高效。Celery-Beat 是 Celery 的一个插件,它提供了任务调度功能,可以定期执行任务。结合 Django 和 Celery-Beat,我们可以轻松地实现异步任务的定时调度。

安装和配置

首先,我们需要安装 Django 和 Celery-Beat。可以通过以下命令在终端中安装它们:

pip install django celery beat
Python

安装完成后,我们需要在 Django 项目的 settings.py 文件中进行相关配置。在 INSTALLED_APPS 列表中添加 ‘django_celery_beat’,并设置 Celery 的相关配置,如下所示:

INSTALLED_APPS = [
    ...
    'django_celery_beat',
    ...
]

# Celery 配置
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_TIMEZONE = 'Asia/Shanghai'
Python

在配置中,我们使用了 Redis 作为我们的消息代理和结果后端。你可以根据你的需求选择其他的代理和后端。

创建任务

接下来,我们需要定义并创建我们的任务。首先,在 Django 项目的某个应用中创建一个名为 tasks.py 的文件。然后,我们可以在该文件中创建我们的任务。例如,我们创建一个名为 send_notification 的任务,用于发送通知邮件给用户。

from celery import shared_task

@shared_task
def send_notification(user_id):
    # 根据用户 ID 获取用户信息和通知内容
    user = User.objects.get(id=user_id)
    notification = Notification.objects.get(user=user)

    # 发送通知邮件
    send_mail(
        'Notification',
        notification.content,
        'noreply@yourdomain.com',
        [user.email],
        fail_silently=False,
    )
Python

在上面的示例中,我们使用了 shared_task 装饰器来创建一个共享任务。这意味着该任务可以在不同的应用中被调用。

配置任务调度

接下来,我们需要配置任务调度。在 Django 项目的 settings.py 文件中,我们可以使用 CELERY_BEAT_SCHEDULE 设置任务的调度规则。例如,我们可以在每天早上 9 点发送通知邮件。需要注意的是,Celery-Beat 使用 UTC 时间,所以我们需要使用 UTC 时间进行配置。

from celery.schedules import crontab

# Celery-Beat 任务调度配置
CELERY_BEAT_SCHEDULE = {
    'send_notification': {
        'task': 'myapp.tasks.send_notification',
        'schedule': crontab(hour=1, minute=0),
        'kwargs': {'user_id': 1},
    },
}
Python

在上面的示例中,我们定义了一个名为 ‘send_notification’ 的任务调度。它指定了任务的名称、要运行的任务、调度规则和传递给任务的参数。

启动 Celery-Beat

现在,我们已经完成了任务的定义和调度配置。接下来,我们需要启动 Celery-Beat 来定时运行我们的任务。

可以在终端中使用以下命令来启动 Celery-Beat:

celery -A your_project_name beat
Python

其中,your_project_name 是你的 Django 项目的名称。

执行任务

最后,我们需要确保 Celery worker 正在运行,以便执行我们的任务。

可以在终端中使用以下命令来启动 Celery worker:

celery -A your_project_name worker --loglevel=info
Python

确保在运行这个命令前,你已经在终端切换到了你的 Django 项目的目录。

总结

本文介绍了如何使用 Django 和 Celery-Beat 启动任务。我们首先安装和配置了 Django 和 Celery-Beat。然后,我们创建了一个发送通知邮件的任务,并配置了任务的调度规则。最后,我们启动了 Celery-Beat 来定时运行任务,并确保 Celery worker 正在运行以执行任务。通过这些步骤,我们可以轻松地实现异步任务的定时调度。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册