第八站:异步、Tasks 与实时边界
本站是 Django 6.0 选修主线:异步视图使用 ASGI 请求栈,Tasks 描述请求外工作。先确认真实阻塞点,再引入异步复杂度。
运行入口
bash
python manage.py test tickets
python manage.py shell专题:异步请求与 Django Tasks | 幂等任务与 ASGI 生命周期
交付物
- 一个
async def状态接口及AsyncClient测试。 - 一个模块级
@task,参数和返回值可 JSON 往返。 - 使用
transaction.on_commit()入队,不让 worker 看见未提交数据。 - 文档写明生产 backend、worker、重试、超时、幂等和监控责任。
版本边界
Django 5.2 LTS 没有内置 Tasks;存量 Celery/RQ 不需要为了升级而重写。Django 6.0 内置 Immediate/Dummy backend 只面向开发与测试,生产执行必须依赖外部基础设施。
练习(先做)
- 用异步 ORM API 返回开放工单数。
- 定义通知任务,只传稳定主键和字符串,不传模型实例。
- 演练任务执行两次,证明结果不会重复改变业务状态。