Django 集成 Celery:状态监控与任务管理

如何通过 Django 来管理 Celery 任务?通过 Django Admin 界面提供任务的查询、查看、重试、终止等功能?下面是一个完整的步骤指南。

在这里插入图片描述

使用 Django 管理 Celery Worker

安装 Django 和相关包

首先,创建一个新的虚拟环境并安装所需的包。

python -m venv myenv
source myenv/bin/activate  # Windows 系统使用: myenv\Scripts\activate
pip install django django-celery-results django-celery-beat celery

创建 Django 项目和应用

django-admin startproject myproject
cd myproject
django-admin startapp myapp

配置 Django 和 Celery

myproject/settings.py 文件中添加以下内容:

INSTALLED_APPS = [
    ...,
    'django_celery_results',
    'django_celery_beat',
    'myapp',  # 确保 app 在这个列表里
]

CELERY_BROKER_URL = 'redis://localhost:6379/0'  # 使用 Redis 作为示例,可以根据需求更改
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'

CELERY_TRACK_STARTED = True
CELERY_SEND_EVENTS = True

# 确保已经配置了数据库
DATABASES = {
   
   
    'default': {
   
   
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 配置 Django 缓存(可选)
CACHES = {
   
   
    'default': {
   
   
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

myproject 目录中创建一个 celery.py 文件:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings

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

app = Celery('myproject')

# 从 Django 的设置中配置 Celery
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现任务
# app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print(f'Request: {
     
     self.request!r}')

修改 myproject/__init__.py 文件,使得 Django 在启动时加载 Celery:

from __future__ import absolute_import, unicode_literals

# 这将确保当 Django 启动时加载 app.py
from .celery import app as celery_app

__all__ = ('celery_app',)

创建一个 Celery 任务

myapp/tasks.py 中创建一个简单的 Celery 任务:

from celery import shared_task

@shared_task
def add(x, y):
    return x + y

注册自定义的 TaskResultAdmin

我们需要在自定义 TaskResultAdmin 之前先取消已经注册的模型。

myapp/admin.py 中做如下修改:

from django.contrib import admin
from django_celery_results.models import TaskResult
from django_celery_results.admin import TaskResultAdmin as DefaultTaskResultAdmin
from django.urls import path
from django.shortcuts import redirect
from celery.result import AsyncResult
from myproject.celery import app

# 取消已经注册的 TaskResult
admin.site.unregister(TaskResult)

# 创建一个自定义的 TaskResultAdmin 继承自默认的 TaskResultAdmin
class CustomTaskResultAdmin(DefaultTaskResultAdmin
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三余知行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值