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

Django项目get_combined函数reporting_date值缓存异常求助

问题解决办法

核心原因是Python函数默认参数的求值时机:默认参数是在函数定义时(也就是gunicorn启动加载模块的那一刻)计算的,而不是每次调用函数时。如果你的get_combined()函数是把datetime.date.today()直接作为参数默认值,那这个值只会在gunicorn启动时生成一次,之后一直复用。

具体修复步骤:

  • 打开定义get_combined()的文件,找到函数参数定义,把默认值改为None,然后在函数内部动态计算日期:
    # 错误写法(默认值只会初始化一次)
    def get_combined(reporting_date=datetime.date.today()):
        # 业务逻辑
    
    # 正确写法(每次调用时动态计算日期)
    def get_combined(reporting_date=None):
        if reporting_date is None:
            reporting_date = datetime.date.today()
        # 后续业务逻辑
    
  • 保存修改后,重启gunicorn一次(sudo systemctl restart gunicorn),之后不用每天重启,刷新页面就能看到reporting_date自动更新为当日日期。

额外排查点:

如果修改后问题仍存在,检查以下情况:

  • 是否给get_combined()或者调用它的视图加了Django缓存装饰器(比如@cache_page、@cache_control),这类装饰器会缓存函数返回结果,导致日期不更新,需要移除或调整缓存时效。
  • 是否用了全局变量存储reporting_date,全局变量同样是在gunicorn启动时初始化,需要把全局变量的赋值逻辑移到函数内部每次调用时执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:55:27