mcpField
D
django-celery-expert

django-celery-expert

github.com/vintasoftware开发1661.1k 次安装14 周前更新
代码仓库

关于 django-celery-expert

面向 Django 与 Celery 开发者的技能,按集成、任务设计、配置、错误处理、定时任务、监控和部署组织指导内容。

主要功能

  1. 01Django 集成模式
  2. 02任务设计与工作流
  3. 03Broker 和 Worker 配置
  4. 04重试与错误处理
  5. 05周期性任务调度
  6. 06监控与部署指导

适用场景

  1. 01设计可靠的后台任务
  2. 02构建链式任务工作流
  3. 03配置定时作业与队列
  4. 04排查重试问题和卡住的任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vintasoftware/django-ai-plugins --skill django-celery-expert

安装后在 Claude Code 中输入/django-celery-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
configuration-guide.md
django-integration.md
error-handling.md
monitoring-observability.md
periodic-tasks.md
production-deployment.md
task-design-patterns.md

详细介绍

Django Celery 专家

说明

步骤 1:对请求进行分类

根据请求确定任务类别:

  • Django 集成 — 事务安全、ORM 模式、测试、请求关联 → 阅读 references/django-integration.md
  • 任务设计 — 新任务、调用模式、链/组/弦、幂等性 → 阅读 references/task-design-patterns.md
  • 配置 — Broker 设置、结果后端、工作进程设置、队列路由 → 阅读 references/configuration-guide.md
  • 错误处理 — 重试、退避、死信队列、超时 → 阅读 references/error-handling.md
  • 周期性任务 — Celery Beat、crontab 计划、动态计划、时区处理 → 阅读 references/periodic-tasks.md
  • 监控 — Flower、Prometheus、日志记录、调试卡住的任务 → 阅读 references/monitoring-observability.md
  • 生产环境部署 — 扩缩容、进程监管、容器、运行状况检查 → 阅读 references/production-deployment.md

如果请求涉及多个类别,请先阅读所有相关参考文件,再继续。

步骤 2:阅读参考文件

阅读步骤 1 中确定的每个参考文件。未阅读相关参考文件之前,不要开始实施。

步骤 3:实施

应用参考文件中的模式。提交解决方案之前,请确认:

  • 任务参数可序列化(传递 ID,而不是模型实例)
  • 启用了重试的任务具有幂等性
  • 错误已附带上下文记录
  • 长时间运行的任务已配置超时

示例

基本后台任务

请求:“用户注册后在后台发送欢迎邮件”

# tasks.py
from celery import shared_task
from django.core.mail import send_mail

@shared_task(bind=True, max_retries=3)
def send_welcome_email(self, user_id):
    from users.models import User

    try:
        user = User.objects.get(id=user_id)
        send_mail(
            subject="Welcome!",
            message=f"Hi {user.name}, welcome to our platform!",
            from_email="[email protected]",
            recipient_list=[user.email],
        )
    except User.DoesNotExist:
        pass
    except Exception as exc:
        raise self.retry(exc=exc, countdown=60 * (2 ** self.request.retries))


# views.py — queue only after the transaction commits
from django.db import transaction

def register(request):
    user = User.objects.create(...)
    transaction.on_commit(lambda: send_welcome_email.delay(user.id))
    return redirect("dashboard")
带进度跟踪的任务

请求:“处理大型 CSV 导入并提供进度更新”

@shared_task(bind=True)
def import_csv(self, file_path, total_rows):
    from myapp.models import Record

    with open(file_path) as f:
        reader = csv.DictReader(f)
        for i, row in enumerate(reader):
            Record.objects.create(**row)
            if i % 100 == 0:
                self.update_state(
                    state="PROGRESS",
                    meta={"current": i, "total": total_rows},
                )

    return {"status": "complete", "processed": total_rows}


# Poll progress
result = import_csv.AsyncResult(task_id)
if result.state == "PROGRESS":
    progress = result.info.get("current", 0) / result.info.get("total", 1)
使用链的工作流

请求:“处理订单:验证库存、收取款项,然后发送确认信息”

from celery import chain

@shared_task
def validate_inventory(order_id):
    order = Order.objects.get(id=order_id)
    if not order.items_in_stock():
        raise ValueError("Items out of stock")
    return order_id

@shared_task
def charge_payment(order_id):
    order = Order.objects.get(id=order_id)
    order.charge()
    return order_id

@shared_task
def send_confirmation(order_id):
    Order.objects.get(id=order_id).send_confirmation_email()

def process_order(order_id):
    chain(
        validate_inventory.s(order_id),
        charge_payment.s(),
        send_confirmation.s(),
    ).delay()

评论

支持 Markdown