Django 6.0 后台任务新特性指南

Django 6.0 提供任务定义与入队 API;生产异步执行仍需第三方持久化后端与 worker。本文讲解 django.tasks 的核心概念、任务定义、后端配置、视图入队与 worker 运行。

最佳实践
并发任务的多路径协同插画

直接回答:Django 6.0 引入原生后台任务框架 django.tasks,提供标准化 API 在请求响应周期之外执行工作——发邮件、处理文件、跑耗时操作不再阻塞用户,它本身不提供生产 worker 或持久化队列,仍需选择执行后端。

为什么后台任务重要

请求-响应周期里做慢操作(发邮件、调外部 API、处理上传文件),用户就得干等。后台任务把这类工作移出请求路径:接口秒回,活在后台干。这是现代 Web 应用体验的基本要求。

Django 的思路演变

过去 Django 生态的答案一直是 Celery——强大但重型:要装消息中间件(Redis/RabbitMQ)、要学一套独立的概念体系。对于"我只是想异步发个邮件"的场景,杀鸡用了牛刀。Django 6.0 的 django.tasks 补上了这块拼图:框架内置统一的任务 API,执行后端可插拔。

django.tasks 实际做了什么

它定义了一套标准接口:@task 装饰器定义任务、enqueue() 入队、后端(backend)负责真正执行。开发期用内置后端零依赖跑起来,生产需评估第三方持久化后端及其 worker,不应假定重试与结果保留语义完全一致。

上手实战

定义任务(tasks.py):

from django.tasks import task
from django.contrib.auth import get_user_model
from django.core.mail import send_mail

User = get_user_model()

@task
def send_welcome_email(user_id: int):
    user = User.objects.get(pk=user_id)
    send_mail("欢迎!", "感谢注册", "noreply@example.com", [user.email])

视图里入队(局部示例,需导入 django.db.transaction、JsonResponse,并实现 create_user 的校验及 CSRF 防护):

def signup(request):
    user = create_user(request.POST)
    transaction.on_commit(lambda: send_welcome_email.enqueue(user_id=user.id))
    return JsonResponse({"status": "ok"})

配置后端(settings.py):内置 ImmediateBackend 同步执行,不缩短请求等待;DummyBackend 仅用于测试且不执行任务。

TASKS = {"default": {"BACKEND": "django.tasks.backends.immediate.ImmediateBackend"}}

生产需安装兼容 Django 6.0 的第三方持久化后端。参数和返回值须能经过 JSON 序列化往返。

跑 worker:Django 核心没有通用 db_worker 命令;以第三方后端文档为准。事务提交后入队也不是原子双写,高可靠业务需 outbox 等补偿机制。

查状态:任务记录带状态字段(待执行/执行中/成功/失败),可通过后端支持的 TaskResult 接口查询,并非自带管理后台。测试时为任务记录执行编号、入队时间、开始时间和终态;用一次失败任务核对结果接口与 worker 日志,区分排队等待和执行耗时。

什么时候仍需 Celery

django.tasks 定义 API 与结果接口;异步执行及持久化由后端实现。以下需求仍属于 Celery(或其他队列)的领地:复杂的任务编排(链式/分组/和弦)、精细的优先级队列、跨语言任务、超大规模吞吐。好消息是 API 边界清晰,日后迁移成本可控。

常见问题(FAQ)

Q:Django 6.0 的任务支持定时调度吗?
A:django.tasks 聚焦"入队即执行"。周期调度仍需 cron、APScheduler 或 celery-beat 触发任务入队。

Q:任务失败了会自动重试吗?
A:取决于后端配置。生产部署建议显式配置重试次数与退避策略,并把终态失败接入告警。

Q:旧项目升级值得吗?
A:已经在用 Celery 且用得顺:不必换。新项目或只用 Celery 做简单异步的项目:可评估统一 API,但应同时比较后端、worker、维护成熟度及迁移成本。

官方参考

本文基于官方文档整理,未进行运行时或性能测试。示例中的业务函数、数据模型和部署地址需结合项目补全;局部片段不等同于完整生产应用。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台