Django Celery 从其他文件名中发现任务

Django Celery 从其他文件名中发现任务

在本文中,我们将介绍如何使用Django Celery从非标准文件名中发现任务。通常情况下,Django Celery默认会从名为tasks.py的文件中发现任务。但是,有时我们可能希望将任务定义在其他文件中,而不是tasks.py。幸运的是,Django Celery提供了一种简单的方式来发现这些任务。

阅读更多:Django 教程

使用@shared_task装饰器定义任务

要在Django Celery中发现任务,首先需要使用@shared_task装饰器来定义任务。这个装饰器告诉Django Celery这个函数是一个任务,可以被Celery调度和执行。

让我们来看一个例子。假设我们有一个名为email_utils.py的文件,其中定义了一个发送电子邮件的任务。

from celery import shared_task

@shared_task
def send_email(subject, message, recipient):
    # 电子邮件发送逻辑
    ...
Python

在上面的代码中,我们使用@shared_task装饰器将send_email函数标记为Django Celery任务。现在,我们的任务可以被Celery调度和执行。

从其他文件名中发现任务

默认情况下,Django Celery会在tasks.py文件中发现任务。如果我们希望从其他文件名中发现任务,可以使用app.autodiscover_tasks方法来告诉Celery从这些文件中发现任务。

在您的celery.py文件中,您需要添加以下代码:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 设置 Django settings 模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')

app = Celery('project_name')

# 从其他文件中发现任务
app.autodiscover_tasks(lambda: ['other_tasks'])
Python

在上面的代码中,我们通过调用app.autodiscover_tasks方法告诉Celery从名为other_tasks的文件中发现任务。这个lambda函数指定了要搜索任务的目录。您可以根据需要添加更多的文件或目录。

示例说明

假设我们有一个名为old_tasks.py的文件,其中定义了一些旧的任务。我们希望Django Celery能够发现并执行这些任务。

from celery import shared_task

@shared_task
def old_task1():
    # 旧任务1的逻辑
    ...

@shared_task
def old_task2():
    # 旧任务2的逻辑
    ...
Python

要让Django Celery发现这些旧任务,我们需要在celery.py文件中添加以下代码:

# 从其他文件中发现任务
app.autodiscover_tasks(lambda: ['old_tasks'])
Python

现在,Django Celery将能够发现并执行old_tasks.py文件中定义的任务。

总结

在本文中,我们介绍了如何使用Django Celery从非标准文件名中发现任务。我们首先使用@shared_task装饰器定义任务,然后使用app.autodiscover_tasks方法告诉Celery从其他文件中发现任务。这个功能使得在Django Celery中管理任务变得更加灵活和方便。

通过这种方法,我们可以将任务定义在不同的文件中,从而使代码更加模块化和可维护。无论您是在开发一个大型项目还是一个小型应用程序,掌握这个技巧将帮助您更好地组织和管理任务。

希望本文对您有所帮助!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册