Python Flask 使用 uWSGI 时获取不到全局变量的原因与解决方案

季宁
季宁
发布时间:2026-10-14| 5人浏览过
原创

本文探讨 Flask 应用在使用 uWSGI 部署时,多进程环境下全局变量无法同步更新的问题。分析指出 uWSGI 的多进程机制导致每个进程拥有独立的全局变量副本。为解决此并发访问问题,建议放弃全局变量,改用 SQLite 等线程安全的共享存储介质来保存数据,从而实现多进程间的数据共享与一致性。

问题背景

问题描述

在开发 Flask 应用并使用 uWSGI 启动服务时,若涉及多个请求线程访问同一个全局变量,会发现无法获取到该全局变量的修改值。值得注意的是,这种问题在 Flask 独立启动(如使用 flask run)时通常不会出现。

代码示例说明

全局变量定义


@app.route('/request1/')
  def 函数1
    修改全局变量

@app.route('/request2/')
  def 函数2
    获取全局变量

原因分析

这很可能与 uWSGI 的线程及进程机制有关。uWSGI 允许指定子进程的数量。当将子进程数设置为 1 时,处理函数 1 的过程中确实无法同时处理函数 2。这类似于 Java Web 中的某些并发模型:uWSGI 为了支持高并发,会独立运行多个进程,从而导致每个进程拥有各自独立的全局变量副本,进而造成数据不同步。

解决方案

解决方案

尝试不修改源码而仅从 uWSGI 配置层面解决,经过长时间搜索仍未找到直接可行的方法。

参考他人经验,一种有效的解决思路是使用数据库等线程安全且支持多进程公共访问的存储介质来存放数据。在这种场景下,使用 SQLite 数据库是最为便捷的选择,因为它能够解决多进程间的数据共享问题。

以上关于 Python 解决 Flask 在 uWSGI 环境下获取不到全局变量的问题,即为本文分享的全部内容。希望上述内容能对大家有所帮助,也欢迎继续支持本站获取更多技术资讯。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。