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

如何在Django+Celery+Beat环境下减少Redis请求量?

解决Upstash每日请求上限问题:调整Celery/Beat配置

问题背景

项目基于Django + Celery + Beat部署在fly.io,fly.toml进程配置如下:

[processes]
  app = "gunicorn --bind :8000 zzrec.wsgi"
  beat = "celery -A zzrec beat -l info -S django"
  celery = "celery -A zzrec worker -l INFO"

开发环境使用免费层时触发Upstash报错:

ResponseError: max daily request limit exceeded. Limit: 10000, Usage: 10000.

需求:将任务检查频率从每秒改为每分钟,避免触发请求上限。

具体解决方案

1. 修改Celery Beat的周期任务频率

由于使用的是django-celery-beat(启动参数-S django),有两种修改方式:

  • 通过Django Admin后台:
    • 登录项目的Django管理后台,找到「周期任务(Periodic Tasks)」菜单
    • 找到设置为每秒执行的任务,将其关联的「间隔调度(Interval Schedule)」修改为每分钟一次(即every=1,period=minutes)
  • 直接修改数据库:
    • 连接到项目的数据库,找到django_celery_beat_intervalschedule表
    • 更新对应任务的调度记录,把every字段设为1,period字段设为minutes

2. 降低Celery Worker的Redis轮询频率

Celery Worker默认会频繁轮询Redis获取任务,可通过配置减少请求次数:

  • 修改Celery配置文件:
    在项目的zzrec/celery.py中添加以下配置:
    from celery import Celery
    
    app = Celery('zzrec')
    # 保留原有配置,新增以下内容
    app.conf.update(
        BROKER_TRANSPORT_OPTIONS={
            'polling_interval': 60.0,  # 每分钟轮询一次Redis
            'max_retries': 3,
        }
    )
    
  • 直接修改fly.toml命令:
    如果找不到配置文件,可在fly.toml的celery进程命令中添加参数:
    celery = "celery -A zzrec worker -l INFO --broker-transport-options polling_interval=60"
    

3. 重新部署生效

执行部署命令更新fly.io上的服务:

fly deploy

验证

部署完成后,观察Upstash的请求统计,确认每日用量不会超过10000次的上限。

内容的提问来源于stack exchange,提问作者Radek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:57:27