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

如何在Python Flask应用中重新初始化全局变量?

解决Flask请求间全局变量无法自动重置的问题

你遇到的核心问题是:Flask应用启动后,utils.py作为模块只会被加载一次,模块级的全局变量aggregateValue会在所有请求间共享状态,修改后不会自动恢复初始值。以下是几种直接可行的解决办法:


方法一:移除全局变量,改用函数内局部状态

把需要重置的变量放到函数内部,让每次调用函数时都重新初始化,从根源避免状态共享。修改utils.py:

def sumValue():
    # 每次调用函数都重新初始化变量
    aggregateValue = " defaultValue"
    x = " mainValue"
    x1 = x + aggregateValue
    aggregateValue = " modifiedValue"
    x2 = x1 + aggregateValue
    print(x2)
    return x2

方法二:调用函数前强制重置全局变量

如果必须保留全局变量的结构,可以在函数开头将变量重置为默认值:

# 定义默认值常量,避免硬编码重复
DEFAULT_AGGREGATE = " defaultValue"
aggregateValue = DEFAULT_AGGREGATE

def sumValue():
    global aggregateValue
    # 每次调用先重置为初始值
    aggregateValue = DEFAULT_AGGREGATE
    
    x = " mainValue"
    x1 = x + aggregateValue
    aggregateValue = " modifiedValue"
    x2 = x1 + aggregateValue
    print(x2)
    return x2

方法三:使用Flask请求上下文对象g存储请求级状态

如果变量仅在单个请求的处理流程中使用,可以用Flask提供的g对象——它是每个请求独有的上下文变量,请求结束后会自动销毁,不会影响其他请求:

  1. 修改app.py,在每个请求前初始化状态:
from flask import Flask, redirect, url_for, request, g
import trainer

app = Flask(__name__)

# 每个请求处理前执行,初始化请求级状态
@app.before_request
def init_request_state():
    g.aggregateValue = " defaultValue"

@app.route('/success/<name>')
def success(name):
    gValue = trainer.myFunction()
    name = name + gValue
    return 'welcome %s' % name

# 其余代码保持不变...
  1. 修改utils.py,使用g对象替代全局变量:
from flask import g

def sumValue():
    x = " mainValue"
    x1 = x + g.aggregateValue
    g.aggregateValue = " modifiedValue"
    x2 = x1 + g.aggregateValue
    print(x2)
    return x2

推荐方案

优先选择方法一,因为全局变量容易引发跨请求的状态混乱,把状态限制在函数内部是最简洁、最不容易出错的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:40:17