django集成celery

发布时间 2023-10-04 12:11:39作者: 蕝戀

参考:

https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html#django-first-steps

这里只记录一些要注意的地方

1、celery主文件

import os

from celery import Celery

# Set the default Django settings module for the 'celery' program.
# 这个是导入django环境的
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

# celery app实例
app = Celery('proj')


# - namespace='CELERY' 指定namespace,
# 如果给定了,表示celery相关配置属性格式变成:namespance_celery属性(必须全部大写),比如:原来叫broker_url,变成CELERY_BROKER_URL
# 使用ns可以避免与django中的其他配置选项名冲突的问题。
# 另外:
# celery的配置可以直接写在django的settings.py中,也可以自己去指定配置文件,如下面:
# 从django settings中读取:
# app.config_from_object('django.conf:settings', namespace='CELERY')
# 从自定的py文件中读取:
app.config_from_object("celery_tasks.config")

# Load task modules from all registered Django apps.
# 默认celery会自动去子应用下找tasks.py并加载定义的任务,你也可以自己手动传递告诉它去哪里找tasks.py
# app.autodiscover_tasks()
app.autodiscover_tasks([
    "celery_tasks.sms",
    "celery_tasks.email",
    "celery_tasks.generate_index",
    "celery_tasks.generate_detail",
    "apps.users.celery_test"
])

项目__init__.py

# 这个必须导入,除非你不用shared_task装饰器。
# shared_task装饰器可以免除掉你在其他地方使用celery app时还需要导包的问题,就是类似flask的current_app这个作用。
from celery_tasks.main import app as celery_app
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.

__all__ = ('celery_app',)