You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework中如何实现定时更新热门商品的周期性任务

Django后端实现周期性更新热门商品表的常用技术方案

以下是不同场景下可选择的4种落地方式,按轻量化到复杂功能排序:

方案1:系统级定时任务(无额外依赖,最简方案)

直接借助Linux服务器自带的crontab实现,不需要安装任何Django第三方扩展:

  • 先编写Django自定义管理命令,在项目对应app下新建management/commands/update_hot_products.py,实现的核心逻辑为:统计全量商品的浏览量取Top6,写入专门存储热门商品的表,建议用事务包裹写操作避免中间状态脏读
  • 在服务器crontab中新增规则:* * * * * /path/to/你的虚拟环境/bin/python /path/to/项目根目录/manage.py update_hot_products,即可实现每分钟自动执行一次更新逻辑
  • 适配场景:单体部署的小型项目,不需要复杂的任务监控、重试能力

方案2:django-crontab(crontab的Django封装)

在Django配置层直接管理定时任务,不需要手动改服务器crontab规则:

  • 安装扩展:pip install django-crontab,在settings.py的INSTALLED_APPS中加入django_crontab
  • 在settings.py中新增任务配置:
CRONJOBS = [
    ('*/1 * * * *', '你项目的app名.tasks.update_hot_products')
]
  • 执行python manage.py crontab add即可自动把规则写入系统crontab,后续修改配置只需要重新执行该命令即可
  • 适配场景:中小型项目,想统一在Django代码里管理定时任务规则

方案3:django-apscheduler(进程内调度,无外部服务依赖)

不需要依赖系统crontab,定时任务和Django主进程一起运行:

  • 安装扩展:pip install django-apscheduler,在INSTALLED_APPS中加入django_apscheduler,执行迁移生成调度器相关表
  • 在项目urls.py或者单独的调度配置文件中注册周期任务,设置执行间隔为60秒,绑定更新热门商品的逻辑即可
  • 注意:如果用Gunicorn/uWSGI多进程部署,需要加分布式锁或者只单独启动一个调度进程,避免同个任务被重复执行多次
  • 适配场景:中小型项目,部署环境不支持自定义crontab,不想额外部署其他服务

方案4:Celery + Celery Beat(工业级稳定方案)

适合已经在使用Celery做异步任务的中大型项目,支持分布式部署、任务重试、监控等完整能力:

  • 安装依赖:pip install celery django-celery-beat,配置好Celery的Broker(一般用Redis/RabbitMQ)
  • 在Celery的任务配置中添加周期任务规则,设置间隔为1分钟,绑定更新热门商品的任务函数,启动Celery Worker和Celery Beat进程即可
  • 支持在Django Admin中可视化修改任务周期、启停任务,不需要改代码重启服务
  • 适配场景:中大型项目,对任务可靠性、可观测性要求高,已经在使用Celery技术栈

额外优化建议

更新热门商品表的时候,建议先做双表切换或者先写临时表再原子替换,避免更新过程中用户请求读到空数据或者不全的热门商品列表。


内容的提问来源于stack exchange,提问作者some nooby questions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:15:03