什么是Django Celery?

Django Celery是Django框架与Celery任务队列的集成。Celery是一个开源的分布式任务队列,它能够并行处理大量的异步任务,从而提高应用的性能和可扩展性。通过将Django Celery与Django框架结合使用,我们可以异步执行一些耗时的操作,如发送电子邮件、处理图片等,从而避免阻塞用户的请求。

配置Django Celery

要在Django项目中使用Celery,我们首先需要安装Celery和其依赖的Redis或者RabbitMQ。接下来,在Django项目的settings.py文件中配置Celery相关的设置:


# settings.py

# Celery配置
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

# 导入任务模块
CELERY_IMPORTS = (
    'myapp.tasks',
)

在上述配置中,我们使用Redis作为消息队列的后端,你也可以使用其他的后端,如RabbitMQ。接着,在Django项目的主urls.py文件中加入以下代码,以便配置Celery异步任务的URL:


# urls.py

from django.urls import include
from django_celery_results import urls as celery_urls

urlpatterns = [
    # ...
    path('celery/', include(celery_urls)),
    # ...
]

创建Celery异步任务

一旦我们配置好了Celery,就可以在Django项目中创建异步任务了。我们可以在一个单独的tasks.py文件中定义Celery任务。

例如,我们创建一个异步的发送电子邮件任务:


# tasks.py

from celery import shared_task
from django.core.mail import send_mail

@shared_task
def send_email_task(subject, message, from_email, recipient_list):
    send_mail(subject, message, from_email, recipient_list)

在上述例子中,我们使用了Celery的shared_task装饰器来把函数转换成异步任务。这样就可以在其他地方调用这个任务来异步发送邮件了。

要使用这个任务,可以在Django的视图函数中调用:


# views.py

from myapp.tasks import send_email_task

def send_email_view(request):
    # 异步发送电子邮件
    send_email_task.delay('Subject', 'Message', 'from@example.com', ['to@example.com'])
    return HttpResponse('Email sent!')

在上述例子中,我们通过delay()方法来异步执行send_email_task任务。这样,在请求的响应中,我们立即返回"Email sent!",而不必等待电子邮件发送完成。