Django Celery 4 不自动发现任务

Django Celery 4 不自动发现任务

在本文中,我们将介绍 Django Celery 4 不自动发现任务的问题,并提供解决方案和示例代码。

阅读更多:Django 教程

问题描述

在旧版本的 Celery 中,任务的自动发现是默认启用的。这意味着,在 Django 项目中定义的任务函数会自动被 Celery 发现并可以被异步执行。然而,在 Celery 4 中,这种自动发现的功能被移除了。

这就导致了一个问题:当我们升级到 Celery 4 时,原本能正常工作的任务突然无法被 Celery 发现和执行了。

解决方案

为了使 Celery 4 能够发现我们定义的任务函数,我们需要手动指定任务模块的位置。具体来说,我们需要在 Django 的配置文件中添加以下配置:

CELERY_IMPORTS = ('myapp.tasks',)

在这个配置中,myapp.tasks 是我们自己定义的包含任务函数的模块。你需要将其替换为你自己的任务模块位置。

示例

假设我们的 Django 项目是一个简单的任务队列系统,我们定义了一个发送邮件的异步任务。我们把这个任务定义在 myapp.tasks 模块中。下面是一个示例代码:

# myapp/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)

然后,在 Django 的配置文件中添加以下配置:

CELERY_IMPORTS = ('myapp.tasks',)

现在,我们就可以通过调用 send_email_task.delay() 来异步执行这个任务了。例如:

from myapp.tasks import send_email_task

send_email_task.delay('Hello', 'This is a test email', 'from@example.com', ['to@example.com'])

总结

在本文中,我们介绍了 Django Celery 4 不自动发现任务的问题,并提供了解决方案和示例代码。通过手动指定任务模块的位置,我们可以使 Celery 4 能够发现和执行我们定义的任务函数。希望本文对你理解和解决这个问题有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程