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

单进程单线程Flask/Gunicorn应用如何维护持久化状态?

在单进程单线程Gunicorn部署的Flask应用中实现共享状态

你的思路完全正确:在单进程单线程的Gunicorn部署模式下,直接使用模块级全局变量就能实现跨请求的状态共享,完全不需要依赖flask.g(它仅在单个请求周期内有效,不适合存储全局持久状态)。

修正后的可运行代码

你原代码存在几处变量名笔误(context与content混用),以下是修正并完善后的完整实现:

from flask import Flask, request, jsonify

app = Flask(__name__)

# 直接在模块级别初始化全局状态,整个应用生命周期内持续存在
global_data = {}

@app.get('/get')
def get_value():
    content = request.json
    if not content or 'key' not in content:
        return jsonify({"error": "请求中缺少'key'参数"}), 400
    key = content['key']
    if key not in global_data:
        return jsonify({"error": f"未找到键'{key}'"}), 404
    return jsonify({key: global_data[key]}), 200

@app.post('/put')
def set_value():
    content = request.json
    if not content or 'key' not in content or 'value' not in content:
        return jsonify({"error": "请求中缺少'key'或'value'参数"}), 400
    key = content['key']
    value = content['value']
    global_data[key] = value
    return jsonify({"message": f"键'{key}'已成功更新"}), 201

关键说明

  1. 全局状态初始化:模块级的global_data = {}会在Flask应用启动时被创建,只要应用不重启,这个字典就会一直保留,所有请求都能直接访问和修改它。
  2. 部署配置:启动Gunicorn时必须明确指定单进程单线程,命令示例:
    gunicorn --workers=1 --threads=1 你的应用文件名:app
    
    这样能确保所有请求都在同一个进程和线程中处理,不会出现多副本状态或并发冲突问题。
  3. 注意事项:
    • 应用重启时,global_data内的所有数据会丢失(适合演示场景,生产环境如需持久化可搭配数据库);
    • 该方案仅适用于单进程单线程部署,若后续切换到多进程/多线程模式,必须改为进程间共享方案(如Redis)或加锁保护数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:02:42